home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr11
/
pdox693.zip
/
MAY93DOS.MSG
< prev
next >
Wrap
Text File
|
1993-06-08
|
327KB
|
7,814 lines
#: 228702 S1/New Users/Misc ·
20-May-93 09:04:47
Sb: #228631-blobs editor problem
Fm: Harry Goldman (TeamB) 75300,1733
To: Yiu Shih Lee 72360,1005 (X)
Start Paradox with the command line option -NoRealHeap
#: 228804 S1/New Users/Misc ·
20-May-93 16:59:59
Sb: Paradox 4.0 Job Availabl
Fm: Jim Clokey 70404,151
To: All
There is a consultant position available in NYC. Following is all that I know
about it: Requires Paradox 4.0 experience including explicit experience with
multi-user network systems, knowledge of Quattro PRO, knowledge of Mouse
Features. Position is with a NYC agency for a, more or less, 6 month period.
Rate is in th $30 to $40 per hour range. I can not answer any other
questions, but if you will FAX your resume to me at (908) 221-3825, I will
forward it to the broker firm if it demonstartes these minimum requirements.
#: 229103 S1/New Users/Misc ·
22-May-93 09:35:35
Sb: #228693-Paradox 40 Book??
Fm: Harry Goldman (TeamB) 75300,1733
To: Martha Kent 72360,414
Yes, My company - DataBase Designs, Inc. sells two books:
"The Paradox 4.0 Developers Guide" by Greaves and Lindsy. (Includes a sample
disk and a copy of R&R report writer). Retail $44.95. Our price $30.00. IF
you live in the state of IL add $2.40 sales tax. S/H is $3.00.
Thus in state the total price is $35.40.
Out of state the total price is $33.00
The other book we sell is "Inside Paradox For Windows" by Richard Wagner
(member of TeamB). The same pricing applies.
You can send us a check and we will be happy to send you as many copies as
you want. We will also be happy to send it to you COD, but then we will need
to charge you the COD price too. (should be about $4.00 I think.)
We have plenty of copies in stock.
Harry Goldman
DataBase Designs, Inc.
450 Caren Dr.
Buffalo Grove, IL 60089
(Voice) 708-634-9355
(Fax) 708-634-9357
#: 229122 S1/New Users/Misc ·
22-May-93 13:13:10
Sb: #229053-Paradox 4.0 .NET file
Fm: Dan Ehrmann (TeamB) 70007,4644
To: andrew spears 70143,1152
You need to reconfigure QuattroPro to recognize the PARADOX.NET file location
that Paradox is using.
To start, run the NUPDATE program in the Paradox directory, and make sure you
have a PARADOX.NET file location defined. You may need to set the Network
Type = "Other".
Then run QPro and somewhere on the Options menu is a dialog to configure
Paradox interop, including the location for the network control file.
You should have only **1** PARADOX.NET, but you will have .LCK files in every
subdirectory where tables are being accessed. Just ignore 'em.
#: 229646 S1/New Users/Misc ·
25-May-93 12:45:36
Sb: PDOX PRINTING SCREENS
Fm: Lynn Alfano 72170,355
To: SYSOP (X)
About 3 weeks ago I asked about a problem we have here where some Paradox 4.01
users are unknowlingly having everything they do in the DOS shell print out on
the network printers. We have Netware 3.11 with DOS 5.0 clients. I have some
more information about the problem.
In DOS, there is a control-P command which sends all screen output to the PRN
device until control-P is entered again to toggle it off. I can't even find
documentation about control-P in the DOS manual.
Well, it seems somehow, when our Paradox users execute "something", this DOS
control-P feature gets turned on. Subsequently, every time they go into
Pal-Edit from Paradox, shell out to DOS, or use an "NPRINT" command from with
PAL, the output goes to the printer. When the users exits Paradox, the
control-P is still set. When they try and log off the network, they get an
"error writing to device PRN, abort or retry?" message. This is, of course,
because their LPT1's are no longer captured by Netware and directed to a
Netware printer.
This "something" that Paradox executes that turns control-P on could be some
PAL printer command, or it could be Pal-Edit (which has its own separate
control-P command) or it could be something else entirely.
Please provide any insight you can to this. You wouldn't believe the amount
of paper and toner that's wasted here because users don't know all this
garbage is coming out down the hall.
Fm: Harry Goldman (TeamB) 75300,1733
[Ctrl] [P] is an OLD OLD command in DOS, I think its been around since
1.0. It is not commonly used, and that may be why you couldn't find
it in the manuals.
It sounds like there is a memory conflict between PDOX and something else
you have loaded on your machines. Try reducing CONFIG.SYS to FILES and
BUFFERS, and the AUTOEXEC.BAT to PATH and PROMPT. Go into PDOX, does the
problem persist ? The only other way that I can think of that this would
happen is if the user is actually pressing [Ctrl][P] in a DOS session.
#: 229678 S1/New Users/Misc ·
25-May-93 16:01:01
Sb: Using calculated fields
Fm: Byron Snedaker 71101,2405
To: sysops (X)
I currently have two summary fields in a report. One that shows the sum per
group
and one that shows the overall sum. I want to divide the sum per group value
by the overall value and post it to each group to show a percentage of the
overall total. Problem is that the overall value isn't generate until the end
of the report. Is there another way around this?
Fm: Steve Erbach (NEWPALS) 70620,3432
There are (at least) two methods:
1) Pre-calculate the overall sum in a query before you run the report
and assign the resulting sum to a PAL variable. Modify your report
to utilize the PAL variable in a calculated field to get the
percentage you want. For example, your query produces the quantity
45,678 for the sum of all values in the column in question. Assign
the sum to the variable sum.n. Then in your report design, place a
calculated field in the Group Footer something like this:
100*SUM([Field A],GROUP)/sum.n.
2) Instead of pre-calculating the sum, you can use the CSUM function in
the Group Footer's calculated field: 100*SUM([Field
A],GROUP)/CSUM("Yourtabl","Field A")
Either one should do it.
#: 229878 S1/New Users/Misc ·
26-May-93 12:51:53
Sb: Network Printing
Fm: Andrew Sweet 71127,2346
To: ALL
I'm writing a Paradox 4.0 application for invoices that I would like to print
on a remote printer down the hall. My application is designed to print each
invoice one at a time. I am using the "Pserver"and "Capture" utilities from
Netware 3.11. I'm having one slight problem. My invoices are not printing
individually as they are created - instead, they are printed all at once after
I exit Paradox.
How can I set up my application (or perhaps my capture statement) in such a
way that each invoice is printed as it is created?
Fm: Jonathan Goldman 70441,572
On your capture line include the parameter TI=15. This will tell Novell
to wait 15 seconds after output has stopped in a print job and then
close it so it can print.
You could also use "RUN CAPTURE" from Paradox after the report.
Fm: David Chu (Sysop) 71333,121
I'm not a real guru on Novell, but here is some of what I DO know. On
your capture statement, make sure you have a short timeout value being
set. An example would be:
capture q=printserver ti=15
The ti=15 is setting a time out value of 15 seconds. This means, if
there is a pause of 15 seconds during a print job, the printserver will
assume the job is done and will print the job automatically. This way,
as long as there is a 15 second pause, the current print job will
automatically print. (You will want to stay away from ti=0 and the na
parameter because this will cause printjobs to remain in the queue until
another capture command is issued or an endcap command is issued.)
#: 230055 S1/New Users/Misc ·
27-May-93 12:02:20
Sb: DLG BOX & FIELDVIEW
Fm: RANDY SINCLAIR 76450,1507
To: SYSOP (X)
Is it possible to move an active dialog box out of sight? My dialog proc
invokes
fieldview on an off-screen memo field, but I am unable to place the resulting
window above the dialog box which called it. Nor am I able to move the dialog
box temporarily off_screen.
Fm: Brian Bushay (TeamB) 76711,516
>Is it possible to move an active dialog box out of sight? My dialog
proc >invokes
Yes you can move a Dialogbox With the Window Move command. You need to
get its handle and will have to use
Window Handle Dialog to handle to get it.
#: 230178 S1/New Users/Misc ·
28-May-93 01:44:41
Sb: strike-out characters
Fm: richard lewis 71534,2077
To: sysop (X)
Does anyone know how to get Paradox to produce text with strike-out
characters, like you see in legal or legislative documents?
Fm: Brian Bushay (TeamB) 76711,516
That would require that the Text be printed twice, the second time with
the strike over character. Depending on what type of printer your
using you will have to make it backup then print the strike over
characters.
Fm: Ted Heatherington 76520,2366
The question is highly dependent on your printer's ability to print
backspace (ASCII 08); if your printer does it, simply print the first
character, an ASCII literal 08, and your second character, ie a hyphen.
You should be able to do strings _on one line_ by printing the string,
issuing enough 08's to move back over the line, then print your second
pass.
This _will not_ work if you are not using a fixed-pitch font, though.
Fm: Richard M. Boddy 72650,2457
You might try downloading TI 478 "Changing Printer Charasterics in a Paradox
report." If your printer manual gives you the codes for a strikeout character
this may help solve the problem.
If not, Brian has a good idea. Hope it works out!
#: 230312 S1/New Users/Misc ·
28-May-93 21:17:25
Sb: LIMS
Fm: Daniel J. Hoch 71542,34
To: sysop (X)
I just finished reading C&E News 5/24/93. They reference a Paradox Based LIMS
shareware program. I am very interested in this. Is it available through
Compuserve? If anyone has any info please contact me.
#: 230530 S1/New Users/Misc ·
31-May-93 16:10:43
Sb: blob fields
Fm: Randal Hundley 73520,1456
To: sysop
I have a database for my cardiology patients, and we use wordperfect for
medical recordkeeping on these patients--one wp file per patient. I'd like to
incorporate the wordprocessing into a blob field in paradox, so that we limit
the number of files (now there are thousands of patient files), and access the
wordperfect files by looking up the pt record in pdox and then editing the
blob wp file.
Is this practicable? Would the blob editor (wp) have to be loaded each and
every time we go to a different pateint and load that patient's wp file
through paradox? I wouldn't want to have to reload wordperfect each time we
changed pateint records. Would WP have full functionality, eg soft fonts,
printing, copying from other files, etc?
Would os/2 or Desqview allow for better functionality with this system? If
this would work, it would sure be great, but beforing asking my Paradox
developer to work on it I wanted your input.
Fm: Don Schubert (TeamB) 70007,4654
WP would only get loaded only if you wanted to view/edit the BLOB field.
Fm: Steve Erbach (NEWPALS) 70620,3432
>> Is this practicable? Would the blob editor (wp) have to be loaded each and
every time we go to a different pateint and load that patient's wp file
through paradox? I wouldn't want to have to reload wordperfect each time we
changed pateint records. Would WP have full functionality, eg soft fonts,
printing, copying from other files, etc? Would os/2 or Desqview allow for
better functionality with this system? <<
Yes it's practicable and yes WordPerfect would have to be loaded each and
every time you go to a different patient. Yes, WordPerfect would have full
functionality w/soft fonts, printing, etc.
There's a trade-off between using the BLOb editor technique in Paradox and the
OS/2 or Desqview (or, for that matter, Windows) technique: Paradox allows you
to "point-and-shoot" at the document you want to edit. Granted, WordPerfect
has to load up itself as well as the document, but the amount of time taken to
do so is really not any different from using a multi-tasking operating system
where you have to pop out of one program into another and then _manually_ call
up the document you want to work on.
The Paradox method stores all the documents in one file. The multi-tasking OS
method stores documents in individual files. You mentioned that there are
thousands of patients, well you'll have thousands of documents on disk.
Perhaps if you went to all-Windows versions of the software you could figure
out some DDE or OLE way to flop in and out of Paradox for Windows and
WordPerfect for Windows while still maintaining the one file Paradox storage
method.
Fm: Don Schubert (TeamB) 70007,4654
To: Steve Erbach (NEWPALS) 70620,3432
>>Yes it's practicable and yes WordPerfect would have to be loaded each and
every time you go to a different patient. Yes, WordPerfect would have full
functionality w/soft fonts, printing, etc.<<
Yes, but ONLY if you are looking at that blob field. I shouldn't think that
would be the case every time a patient record was accessed. Can you imagine
what it would be like if the blob editor was loaded each time you scrolled to
a new record <grin>?
Perhaps viewing the blob field was what Randal had in mind. It wasn't clear
from his msg.
Fm: Randal Hundley 73520,1456
To: Don Schubert (TeamB) 70007,4654
thanks for your thoughts and replies here. In the scenario I imagined,
doctors and nurses would frequently look up patients in paradox and view/edit
fields other than the blob field. For some users, looking at blobs would be a
rarity. For the transcriptionists in the office, who do nothing but type in
wordperfect, they would pretty much load wp to use their WP (blob). The whole
point of my idea is to have all our information in one place.
I'm a cardiologist, and with a pdox developer (David McBride), we have
developed a wonderful clinically oriented database which stores much
inforamtion about patients, procedures done, outcomes, scheduled followups,
etc. Our formal medical recordkeeping, is on paper and in wordperfect. I
devote a huge effort to keeping a detailed problem list on every patient's
chart, and this gets updated (in WP) each time something important happens to
the patient. Wouldn't it be great to be able to access that problem list from
within paradox? This is my objective--putting it all-the database and the
transcription-under one roof----namely, Paradox. It sounds like it is very
dooable, but (1) secretaries would have to load and unload wordperfect each
time they moved to a different patient, and (2) the .db file would be
huge!!!!! Loading wp takes only a moment, but from a hardware perspective is
there a problem with loading the same big file from disk many times each day?
(eg wear and tear). The benefit to the secretaries would be that they would
no longer have to search for patient files--they would all be in the big
database.
Fm: Steve Erbach (NEWPALS) 70620,3432
To: Randal Hundley 73520,1456
>> It sounds like it is very dooable, but (1) secretaries would have to load
and unload wordperfect each time they moved to a different patient, and (2)
the .db file would be huge!!!!! Loading wp takes only a moment, but from a
hardware perspective is there a problem with loading the same big file from
disk many times each day? (eg wear and tear). <<
With that small correction from Herr Schubert, we can focus on just what each
of your staff needs to do. Transcriptionists would all be mostly in
WordPerfect, using Paradox just to locate the proper document; everyone else
would be more concerned with the patient data.
As you point out, loading (and unloading) WordPerfect takes only a moment.
There is really no hardware problem at all. There is _less_ "wear and tear"
loading word processing files since they would be in memory entirely unless
you have inordinately large documents. Then there would be some (emphasis
_some_) disk access.
The WordPerfect documents would actually be stored in an .mb file, not the
.db. Yes, it could get large. Again, that is no problem since Paradox can
manage up to 256 MB of BLObs _per table_. Now's the time for that 1 GB drive
you've been ogling!
Fm: Don Schubert (TeamB) 70007,4654
To: Randal Hundley 73520,1456
Two things. You should have your secretaries also save to a second wp file
outside of pdox for extra backup and access outside of pdox. Second, at the
end of the day, the table containing the blob should be packed/restructured.
There is a bit of bloat each time a blob is viewed. In general most of the
blob is stored in the binary file, so the the master .db shouldn't get that
much larger (except for the foregoing).
Fm: Brian Bushay (TeamB) 76711,516
To: Randal Hundley 73520,1456
>Is this practicable?
Yes It should be
>Would the blob editor (wp) have to be loaded each and
>every time we go to a different pateint and load that patient's wp file
>through paradox?
Yes that is the way a blob editor works
>Would WP have full functionality, eg soft fonts,
>printing, copying from other files, etc?
Yes.
>Would os/2 or Desqview allow for better functionality with this system? If
>this would work, it would sure be great, but beforing asking my Paradox
>developer to work on it I wanted your input.
These should allow you to keep WP loaded in another window, I an not sure
how you would handle switching Windows.
Fm: David Berg (Borland) 73020,374
To: Randal Hundley 73520,1456
See other notes first.
While using DesqView, OS/2 or Windows for multi-tasking will work, you will
have issues coordinating everything. It might be easier to take some of the
extra memory you'd be using under those approaches and use it for an external
disk cache. This would result in most of WP being in memory and a fairly fast
load.
A lot depends on how often you need to call up the attached memos.
If you always need to call up the information, then Paradox Windows might be a
better solution.
You might want to do some tests with various arrangements to see what works
best for your specific situation.
#: 230533 S1/New Users/Misc ·
31-May-93 16:45:18
Sb: Runtime Mtce Avail Date?
Fm: Virginia B. Sauer 72607,3335
To: All
My former boss just ordered Paradox 4 Runtime for DOS to create more room
on a hard drive. (Do _NOT_ ask me why he thought that _ADDING_ the
runtime version would create more disk space, particularly since the PC was
already connected to a LAN offering a multi-user version of the application
needed.)
The order was processed on May 10th, and he received version 4.0, with all
files dated 1992. Since all Paradox 4 DOS applications are written in 4.01,
we obviously need the runtime version to be the same.
The vendor maintains that no maintenance releases were available for
Runtime as of May 10th (i. e., _neither_ 4.01 or 4.02), and that it is
therefore our tough luck and we must send Borland $ 15 if we want the
maintenance release.
Since we have already paid this particular vendor several hundred thousand
dollars so far this year, he obviously has a lot to learn about customer
service, and my personal recommendation is to change vendors <g>.
However, we would like to be able to confirm whether or not a runtime
maintenance release was available as of May 10th.
Likewise, we do not want to be unreasonable, but had been under the
impression that a vendor should provide maintenance releases if available
at the time of purchase (particularly when asked), so would also greatly
appreciate any feedback on what consitutes standard business practice in
this area.
Thank you very much for any help you can provide.
Regards,
Virginia
Fm: Don Schubert (TeamB) 70007,4654
Runtime 4.01 should certainly have been available well before 5/10. You
could check the announcements (a;1 from the ! prompt) to get an
educated guess of the nearest weekday Runtime 4.02 was available.
Vendors are sloppy and don't keep up with this stuff as a rule (although
they should).
Dump your vendor.
Is this your notorious ex-boss <g>? Someone should confiscate his
computer.
Don
Fm: Virginia B. Sauer 72607,3335
To: Don Schubert (TeamB) 70007,4654 (X)
Don -
_MANY_ thanks for your helpful response (as always).
I was confident that Runtime 4.01 had been available before May 10th,
but needed some form of confirmation.
And I fully agree that changing vendors should be our first priority.
Although I can readily understand their not being aware of a maintenance
release, when a customer specifically asks about it (at the time of the
order), it is not acceptable to be told that that is our tough luck and
we must send Borland $ 15 if we want a copy. Moreover, since we have
already paid this vendor several hundred thousand dollars so far this
year, it does seem somewhat tacky to refuse to absorb $ 15 to give us
the correct version.
Now, how did you ever guess that this was the same ex-boss who
decided to _edit_ the custom script the first time he saw Paradox
(ignoring my pitiful bleating and insisting that he could figure out
which encrypted characters to change) - after which the entire LAN had
to be reinstalled? Actually, the man is brilliant, and does splendidly
so long as discussions remain theoretical ... Just don't let him
actually _touch_ anything <g>. (My current boss is _perfect_.)
Take care, and _THANKS_ _AGAIN_.
Regards,
Ginny
Fm: Don Schubert (TeamB) 70007,4654
To: Virginia B. Sauer 72607,3335
My pleasure, Ginny. And pay no attention to that Brain guy. The skeeters
have gotten to him, I suspect...
DOn
Fm: Virginia B. Sauer 72607,3335
To: Brian Bushay (TeamB) 76711,516 (X)
Brian -
Actually, I do not believe that this was a "special order", since the
person placing the order merely wanted to increase the available disk
space on a hard drive. (I _TOLD_ you not to ask me why he thought
that _ADDING_ Runtime was going to accomplish this <g>.)
The first _I_ heard of it was when the little treasure arrived, and I
immediately asked why it was not 4.02. Had it been a special order, I
believe that they would have first come to me.
We have a new CIO. Since hitting the "big red switch" is particularly
nasty with multi-user applications, and I track each user's entry and
"correct" exit, I was thinking in terms of a flashing red message the
next time guilty parties log on, blinking:
-------------------------------------------------------
| YOU DID NOT EXIT THE SYSTEM CORRECTLY ON _________. |
| |
| PLEASE CONTACT _______ TO DETERMINE HOW |
| MUCH CORPORATE DATA YOUR ACTIONS ERASED. |
-------------------------------------------------------
Think it would work?
Seriously, _MANY_ thanks for _ALL_ of your help (as always).
Regards,
Virginia
Fm: Virginia B. Sauer 72607,3335
To: Brian Bushay (TeamB) 76711,516
Brian -
<< Require the user to fill out a two page form (all fields required). >>
I like your style! (And perhaps long, loud use of the sound
command would be nice while they are entering the required fields...)
Regards,
Virginia
Fm: Steve Caple (TeamB) 76711,520
To: Virginia B. Sauer 72607,3335
Arrrrrgh, matey! 2 pages, all required fields, too, with hidden
lookups ... or walk the plank!
(Hi, Virginia - you've brightened our lives again!)
Fm: Virginia B. Sauer 72607,3335
To: Steve Caple (TeamB) 76711,520
Hi Steve:
<< 2 pages, all required fields, too, with hidden lookups ... >>
Yeah, but the _MOST_ important feature is to have the system first check
the user's title, so that the chairman et al instead receive a gracious
"Please do not do that again" <g>.
(Giving senior management all required fields might, er, make them
feel that the _DEVELOPER'S_ services would no longer be required.)
Regards,
Virginia
#: 230655 S1/New Users/Misc ·
01-Jun-93 10:48:21
Sb: memo resource failure
Fm: Rohit Gangwar 75330,537
To: all
While on a memo field in a table-view, the following command
fails with a "I113: Resource Error File Create":
FileWrite "somefile.txt" From [] + Chr(4)
while the following PAL code works as expected:
a = [] + Chr(4)
FileWrite "somefile.txt" From a
Is this behavior expected? The machine in question has 8 Meg RAM,
HIMEM.SYS is loaded, and Paradox is started using -extk=4096 switch.
The memo field is smaller than 64 KBytes.
Both alternatives work on my work machine with the same amount of
memory and Paradox allocation, using EMM386. The number of files
specified in Config.sys is 80 on both machines.
Fm: Don Schubert (TeamB) 70007,4654
Example #2 is the preferred way to code it.
#: 230687 S1/New Users/Misc ·
01-Jun-93 15:30:43
Sb: formatting for case
Fm: John Pirtle 71742,2032
To: all
Our financial company uses a database software that causes everything input to
be in UPPER case.
I can convert everything to Paradox 4.0, but the client names, etc. come out
in UPPER case. How can I convert this to lower case so that I can use the
FORMAT ("CC", LNAME) command (LNAME is the field name) to get to the regular
first letter capitalized format?
I'm a new user to Paradox, and am not really using any of the PAL. So what's
the easiest way to do this?
Fm: Brian Bushay (TeamB) 76711,516
To: John Pirtle 71742,2032
>I can convert everything to Paradox 4.0, but the client names, etc. come out
>in UPPER case. How can I convert this to lower case so that I can use the
>FORMAT ("CC", LNAME) command (LNAME is the field name) to get to the regular
>first letter capitalized format?
You need a bit of PAL code for this conversion
CoEdit "YourTbl" ;put the table on the workspace in CoEdit
Scan ;this command loops threw all record from top to bottom
[Lname] = Format("CC",Lower([Lname]))
[Fname] = Format("CC",Lower([Fname])) ;you can do other fields too
EndScan
Fm: Virginia B. Sauer 72607,3335
John -
I am CMailing you a simple generic utility to automatically convert any
field to any desired case.
I hope that you will find it helpful.
Regards,
Virginia
#: 230761 S1/New Users/Misc ·
01-Jun-93 20:50:09
Sb: INIT.SC wont
Fm: ron johnson 71330,3266
To: sysop (X)
I have a problem with INIT.SC. If I run PX4.0 with -share on, PX does not
recognize (nor run) the INIT.SC. If -share is OFF, it works correctly. I
require '-share' since we shell out to Paradox Engine to perform some
calculations then empty the table, and PX will not recognize the changes
without it. I tried putting INIT in the root dir next to .NET file but still
did not work.
Fm: Harry Goldman (TeamB) 75300,1733
When using -SHARE PDOX thinks that you are on a network, and will look
for the INIT script in your PRIVATE Directory. Make sure that you
have a private directory defined, that the INIT script is in it, and
that this directory is in your DOS PATH.
Fm: Brian Bushay (TeamB) 76711,516
init.sc is a private script that is intended to be read from each users
private directory.
If you want a Global script call that script as a command line parameter
Paradox -share scriptname
#: 230784 S1/New Users/Misc ·
01-Jun-93 23:21:02
Sb: Memo Field Edit
Fm: larry hoefling 71271,3251
To: SYSOP (X)
This seems like such a fundamental question that I am embarrassed to ask.
However, after pouring the manuals and still finding no answer---
I am attempting to allow a user to edit a memo field in a multi-table form,
with a structure similar to this:
Table: Names Table: Comments
Lastname A25* Lastname A25*
Firstname A25* Firstname A25*
Date
D*
Comment M15
I'm using a form on the "NAMES" table with an embedded linked "COMMENTS"
table. I can press F9 and edit the date field just fine - but when I attempt
to edit the memo field, I can't a "CANT EDIT THIS FIELD" error msg. Pressing
CTRL-F pops the editor up just fine, and any message I have entered in table
view will be displayed in the form view...but no editing is possible. I
cannot find any reference to this situation in the manual. It seems so basic
- what gives?
Also - I have seen references to version 4.02...I've received the 4.01
update with Tutility...how do I receive the next maintenance update and what
do I tell my clients who ask why a fix was needed. (They always ask
what the bug was...)
#: 231253 S1/New Users/Misc ·
03-Jun-93 23:19:14
Sb: #231132-Splash .exe
Fm: Harry Goldman (TeamB) 75300,1733
To: Russ Petrucci 70324,257 (X)
The utility I used was called GRABBER. It is shareware, and can be
downloaded from the IBM forums. It is also sold through an shareware house
in TX.
#: 231524 S1/New Users/Misc ·
05-Jun-93 13:07:19
Sb: #231425-Duplicates
Fm: Harry Goldman (TeamB) 75300,1733
To: Vincent Wellrich 72340,203
You will have to use a little PAL to do this.
There are two ways that you can delete the records. First, you can use PAL
to search for a match on the first field, then attempt to match the first
three characters of the second field with PAL. If the match fails, look for
the next occurance and try again:
View "Table1" ; <--- Table to delete records from
CoEdit "Table2"
Scan
Message Recno()
Val1 = [Field1]
Val2 = Substr([Feild2],1,3) ; Grab the first three characters
Moveto "Table1" ; Jump to the other table
Home ; Make sure we are at the top
Moveto [Field1] ; Get to the right field
Locate Val1 ; Try to find the value from field 1
If Retval Then ; If found do this:
Retval = True ;
While Retval ; loop through all field 1 's
If Val2 = Substr([Field2],1,3) Then ; look for 3 characters
Del ; first one found, delete
Quitloop ; done
Endif ;
Down ; If the 3 characters didn't match, go
Locate Next Val1 ; for the next value of Field1
Endwhile ;
Endif ;
Moveto "Table2" ; when done, return to table2
Endscan
;-----------------------------------
The second way to do this would be to set up an A3 field. Use PAL to copy
the first three characters from Field2 to this new field. Now you can use a
query to delete the matching records.
Fm: John B. Moore (TeamB) 71333,1775
Off the top I'd say you will need to create a new field (temporary) and
use a scan with Substr() to extract the first three characters. Then a
query will take care of the rest.. You'll then need the famous
"Not-in" query. For that see Techfax 784
#: 231559 S1/New Users/Misc ·
05-Jun-93 14:46:08
Sb: #231138-APPENDARRAY
Fm: Marlene Thacker (Sysop) 76702,1052
To: Randy Sinclair 76450,1507 (X)
Append Array will only add one record at a time. What you can do is put
yourself in some kind of a loop remembering to always move down one record so
you don't overwrite your latest entry.
#: 231367 S1/New Users/Misc ·
04-Jun-93 14:13:39
Sb: Application build help
Fm: michael marks 76044,1013
To: ALL
My company, a consultant firms (sales and mangement mostly) has asked
me to write an application. They want this application to read in sales
figures from various salesmen and give and an interpretation of the data. For
example, most database or other "inventory" holding programs can dump the data
into a standard ASCI file, with commas to divde up the groups. The application
should read in the column marked total, or just column 1 and respond: The
numbers are decreasing at a rapid margin, so the application follows a
pre-defined flow chart and responds: Try better communication. Make any sense?
The flowchart and rules are already on paper. However I am not quite sure how
to start, I have a extended amount of time, so I can learn the nessesary
tools..Someone adivised that Clarion(dos), Access, would do everything I
need..I understand a little Pascal and C, but not enough to begin here. I have
not commited to either Windows or Dos yet. I would be grateful for any
comments. Thanks in advance.
Fm: Marlene Thacker (Sysop) 76702,1052
> My company, a consultant firms (sales and mangement mostly) has
asked me to write an application. They want this application to read in
sales figures from various salesmen and give and an interpretation of
the data.
>For example, most database or other "inventory" holding programs can
dump the data into a standard ASCI file, with commas to divde up the
groups. The application should read in the column marked total, or just
column 1 and respond: The numbers are decreasing at a rapid margin, so
the application follows a pre-defined flow chart and responds: Try
better communication. Make any sense? The flowchart and rules are
already on paper. However I am not quite sure how to start, I have a
extended amount of time, so I can learn the nessesary tools..
>Someone adivised that Clarion(dos), Access, would do everything I
need..I understand a little Pascal and C, but not enough to begin here.
I have not commited to either Windows or Dos yet. I would be grateful
for any comments. Thanks in advance.
I can think of two ideal situations for what you're trying to do. One
would be Paradox for Windows using ObjectPal. One of the benefits here
is that your enduser will be able to remain in a Windows environment.
You would have to import the data in question into Paradox. I do not
know of any database on the market that can analyze a txt file without
import. The other would be a combination (hot-link) of Paradox 4.0 and
Quattro Pro. The reason for adding Quattro Pro into the picture is the
Advanced Graphing capabilities of the package.
The "flowchart" logical choice would be relatively simple in both
packages
For a comprehensive list of Paradox for Dos 4.0 download a Technical
information Handout # 1111 from section 12 of this forum or for Paradox
for Windows download Technical Information Handout # 1239 from the
PdoxWin forums.
Fm: Dickford Cohn 76226,1572
Marlene, re 'I know of no database product on the market that can
analyze and ASCII file without import'...while technically not a
database product, per se...Personics MONARCH can do this very nicely
-and- interactively...no coding and no importing...and it can create
files in a variety of formats for further processing, if that is
desired. I'm sure there are other products out there that folks
prefer, too. FWIW...
Fm: Don Schubert (TeamB) 70007,4654
To: Dickford Cohn 76226,1572
MONARCH does not aalyze the data in the sense that a spreadsheet (or
PDOXWIN) can. It will, however, allow one to work with ascii data
directly in a flatfile kind of way.
Fm: Dickford Cohn 76226,1572
To: Don Schubert (TeamB) 70007,4654 (X)
That's what I was trying to say in my typical obfuscatory kind of
way...you can do quite a bit with it (Monarch) if you're satisfied
with rudimentary data manipulations. As is so often the case however,
data begets data, in which case it would definitely be worth the time
spent to get this stuff into a spreadsheet or database to begin with.
My only point was that if someone needed a quick read on say 'Sales by
Region' from an ASCII report from the mainframe, this could be done in
Monarch in three shakes of a lamb's tail. Obviously, there is no way to
compare historical data unless it's included within the same report.
Fm: Don Schubert (TeamB) 70007,4654
Graphing functions are a bit threadbare in Monarch, too <smile>...
Fm: Norman Cavender 70523,463
I'm not sure I understand precisely what you are trying to do. Provided
your rules are logically defined and correspond to specific actions,
Paradox has quite a bit of capability. Whether software exists that
would do it better, I can't say. But in the category you mention
(Paradox, Clarion, Access) I believe you would be extremely happy with
the capabilities of Paradox and the PAL/Opal languages.
FWIW, we use Paradox for some rather complex production planning: "If x
and not y, then adjust the volume of z and notify q". If this type of
logical construct is what you have in mind, post a more specific
question. You will find numerous people here willing to help you sort
out an approach.
#: 229756 S2/Pdx Vers/1.0-3.5 ·
25-May-93 23:05:52
Sb: Mailing Labels
Fm: Barbara J. Pfieffer 72302,2453
To: sysop (X)
I am using 3.5 and I am having several problems with mailing labels. The
printer is a HPII.
Problem one: I have cases where either there are husband and wife at the same
address or sisters with the same last name at the same address. My users want
to send out only one label for these situations. Obviously I can't use Mr &
Mrs to select only one label. Is there a way in the report form to print only
one of these? Or possibly a query before using the report?
Problem two: I need ideas. To print 3 across, I can only fit the first name
and last name field. My users would like to put in titles where appropriate
(Dr. Fr. Sr.). These titles are in a separate field in the database. Is there
any way to insert the title when and where necessary?
I can't add another line to the label, it will screw up the alignment. I
already have field and line squeeze applied. All help will be appreciated.
Fm: Brian Bushay (TeamB) 76711,516
>Problem one: I have cases where either there are husband and wife at the same
>address or sisters with the same last name at the same address. My users want
Assuming last name and Address are the same for these labels you want to
combine you can use a query like this
YourTbl | First name | Last Name | Address | City |
| Calc Max as F name | Check | Check | Check |
This will leave you with one record per last name/Address combination.
To get more intelligence you will have to write a PAL program.
>(Dr. Fr. Sr.). These titles are in a separate field in the database. Is there
You would have to have an additional field that would indicate it the Title
(Dr.) went at the beginning of the name or the end (Sr.)
Fm: Curtis Christensen 72120,3621
You may want to try calculated fields where you add the title field and the
first name field and the title and lastname fields together
i.e. [title]+" "+[firstname]
as the field placed on the report that way your field squeeze will work and
they will show without leading space when not needed ( as an empty field
would).
Be sure to include the blank space so they don't run together
#: 230283 S2/Pdx Vers/1.0-3.5 ·
28-May-93 17:20:22
Sb: Linking
Fm: Beth Bilgram 72302,3612
To: all
Currently, I have a spreadsheet that calculates benefit information based on
the information I input. This spreadsheet acts as a template. The
information that I input comes from my Paradox 3.0 database. In order to
perform the benefit calculation I have to access the database, look up the
information needed for the spreadsheet inputs, write down this information,
access the spreadsheet, and input the information. This process becomes quite
tedious when it is necessary to calculate benefits for many individuals. Is
there any way to link my database directly to the spreadsheet template that I
have created? Or is there perhaps a third party package that can link the
two? I would like for this database to shoot over the input fields necessary
for my spreadsheet.
Fm: Steve Caple (TeamB) 76711,520
There are a couple of possibilities. One is that QuattroPro and Paradox 3.5
and later (I know, you said you have 3.0) interoperate. QuattroPro 4
operates very well directly on Paradox tables (of course, the size is limited
by the limitations of the spreadsheet memory).
Possibly better, and accomplishable in 3.0, is a table that contains the
ranges, codes, rates, etc. that determine which variant calculations should
be performed. This and some queries might do the looking up and calculating
for you without leaving Paradox. Drop us some table structure info and
sample calculation parameters and maybe we can set up a query for you that
will show the pattern to follow.
#: 230513 S2/Pdx Vers/1.0-3.5 ·
31-May-93 13:56:10
Sb: find recs > spec length
Fm: Gunji Bagla 71321,2126
To: All
I am trying to convert/export a 10,000 record Pdox database into another
program. I discovered that the new pgm has certain many fields that are
smaller than my current Pdox fields. Rather than let the export process trim
the fields, I need to look at each instance where trimming may occur and
attempt to come up with a system (such as insepction and abbreviation or
whatever) to minimize loss of useful data.
I was wondering if there is any easy way in Pdox to identufy records where a
specified field exceeds a specified length. I will have to do this this
process for about 15-20 of the 65 different fileds I am exporting...
Fm: Graham L. Stoppani 100111,265
I am sure some will come up with a more sophisticated answer than this but
try the following:
1. take a copy of the file for safety's sake.
2. MODIFY, RESTRUCTURE
3. change the field length of one or more of the fields you are concerned
with to their smaller size for the new program.
4. DO_IT! and take the NO TRIMMING option.
5. any records who's fields are now longer than the new smaller length will
be placed in a table called PROBLEMS.
Fm: Don Schubert (TeamB) 70007,4654
Just off the top of my head. You could create/borrow a special export table
with the shortened fields in it and keyed. Then try to add your real table's
records to it. The problem records should fall out into a keyviol table which
you can rename and work with.
#: 230663 S2/Pdx Vers/1.0-3.5 ·
01-Jun-93 12:44:09
Sb: Copying 10MB table
Fm: Robin Compton 75250,2656
To: sysop (X)
Is it possible to copy all of the files belonging to a table to floppy
diskettes when the table itself is well over 10MB? How does one go about
doing that? Thanks!!
Fm: Brian Bushay (TeamB) 76711,516
No not from Paradox and not with DOS COPY. You can use DOS BACKUP or
some other backup program. Of course this will require multiple disks
Fm: Virginia B. Sauer 72607,3335
Several public domain or shareware products are available to copy files that
exceed the size of a single diskette. I am CMailing you Slice.Com, which
is included in PC Magazine's book (DOS 5 Techniques and Utilities), and on
their CompuServe forum). The following directions assume that you are at
the DOS prompt; if invoked from Paradox, simply type as a run command - e.
g., Run "Slice MyFile.Zip A:", substituting your filename for MyFile.Zip.
Slice.com breaks large files into pieces and copies it to the required
number of diskettes. The format is Slice Filename TargetDrive - e. g., to
split a file named MyFile.Zip to diskettes in drive A:
Slice MyFile.Zip A:
| | |_ Target drive containing diskette
| |__________ Name and extension of file to be copied
|________________ Word Slice
During this process, file Splice.com will be automatically added to the
first diskette. Splice.com reconstructs the divided files, using format
SourceDrive:\Splice SourceDrive: TargetDrive\TargetDirectory - e. g., to
copy the above spliced file from a diskette in Drive A to directory c:\MyDir:
-- Insert the first diskette "sliced" as above (since this is the one
that will contain the "Splice" command).
-- Then, type:
A:\Splice A: C:\MyDir
| | | | |_ Target drive and directory to which to copy file
| | | |______ Source drive (containing the diskette)
| | |___________ Word Splice
| |______________ Backslash
|________________ Source drive (containing the diskette)
I hope that this will prove helpful.
#: 231692 S2/Pdx Vers/1.0-3.5 ·
06-Jun-93 22:30:26
Sb: EDIT A FEW RECORDS
Fm: JOHN KLIEGL 70372,3007
To: ALL
I have two tables CUSTOMER and NOTES.
the CUSTOMER file is keyed to [CUST#] and the NOTES file is keyed to [CUST#]
and [date]
I have created a multi-table form to enter my info. I would like to edit the
multi-table form for just one [date]. but I can only edit all the records in
the file.
If I ask the NOTES file for a certian date it will give me all the [CUST#]'s
for that date , but I don't know how to select ONLY those customers to edit.
CUSTOMER NOTES
[CUST#] * [CUST#] *
[NAME] [DATE] *
[ADDR] [NOTES]
[CITY]
[STATE]
[ZIP]
etc.
in short...
So I want to edit all the CUSTOMER records with NOTES>[date] = "06/06/93".
Fm: Steve Caple (TeamB) 76711,520
I'm assuming that Notes is the embedded detail and is embedded _linked_
to Customer.
In a form such as this, for a given Customer, only and all of those
Note entries for that Cust# will be displayed and available for edit.
To see all the Notes entries for a given date, regardless of Customer,
you cannot use the linked form. In single user mode, you could use a
query (checkmark all fields, use tableview or another form on the
Answer) to select all Notes records for that date, edit them, and then
do a Tools/More/Add/Update to propagate the changes back.
#: 231800 S2/Pdx Vers/1.0-3.5 ·
07-Jun-93 14:35:09
Sb: Runtime 3.5 problem
Fm: Roger Fletcher 100016,234
To: All
A client has just tried to install an application of mine on her 486. When
she enters "pdoxrun scriptname" she is dumped back at the DOS prompt with the
Paradox error message "Internal 0608GP1507".
Fm: Dickford Cohn 76226,1572
I'm assuming that you're using version 3.5 of Runtime...if so, have your
user include the -REAL command on your startup line...that's no
guarantee that the app will run -but- you should get a meaningful error
message either when Pdoxrun abends -or- in the Debugger. EXAMPLE:
PDOXRUN -REAL scriptname
#: 229170 S3/Install/CFG/HrdWare ·
22-May-93 21:00:22
Sb: #228994-Caching
Fm: Michael Radulescu 71561,3647
To: Dickford Cohn 76226,1572 (X)
A few weeks back I called BI, there's a dept. some "special events", which
handles this. The binder(s?) will set you back app. $200... at least this is a
number a nice lady gave me at that time...
#: 229199 S3/Install/CFG/HrdWare ·
23-May-93 11:00:14
Sb: #229171-Paradox Runtime 4.0
Fm: Les Gainous 72731,146
To: Michael Radulescu 71561,3647
RE: I have not installed it (RT) but I suspect it is 4.02.
The date/times (on the diskettes) on both the full development system and
runtime files is:
05/04/93 4:02a.m.
So, if the time is 4:02a.m., looks like you have v4.02. A "sure-fire" way
to find out is to try to update a table through a form viewed in secondary
index order. If you can issue the PAL command:
POSTRECORD NOPOST LEAVELOCKED
without recieving an errorcode of 20, then you have v4.02.
Good Luck! Les 72731,146
Fm: Dickford Cohn 76226,1572
Les, I thought VERSION() is supposed to return 4.02...is that not
correct?
Fm: Don Schubert (TeamB) 70007,4654
To: Dickford Cohn 76226,1572 (X)
That is correct. VERSION() returns 4.02.
#: 230597 S3/Install/CFG/HrdWare ·
31-May-93 23:48:20
Sb: #229601-Auth Users Exceeded
Fm: Mike Downey (CHC) 70404,2657
To: Harry Goldman (TeamB) 75300,1733
To clear up any confusion, there is indeed a CUSTOM script included with
v4.0x, though you are no longer required to call it on the command line.
Even if you use Utilities|Custom from the system menu, the script is still
required. I assume that Paradox will always look for it in the directory
where it found PARADOX.EXE.
Also, I believe that if you have PDOXRUN, you would still need to use
"pdoxrun custom" or have a PAL script with {p} {Utilities} {Custom}. I
prefer the method of running custom from paradox and copying PARADOX.CFG to
PDOXRUN.CFG.
#: 229266 S4/Forms/Handling Data ·
23-May-93 22:20:50
Sb: #229243-Calc fields in forms
Fm: Harry Goldman (TeamB) 75300,1733
To: Brad Morris 71035,753 (X)
>How do I go about doing this? I can do it in PDOX for windows but can it be
>done in DOS? (I have Pdox 4.0)
You will need to place a variable in the calc'ed field, and then use PAL to
set the value of the variable to the sum of the fields in the linked
display.
Fm: Brian Bushay (TeamB) 76711,516
To: Brad Morris 71035,753 (X)
You will need to use PAL to move to the embeded form and total the field
and set a variable equal to that total. Then move back to the master
form. In the form use a Calculated field using the variable.
#: 229376 S4/Forms/Handling Data ·
24-May-93 13:10:59
Sb: auto key generation
Fm: David Rudd 76264,1765
To: techsupp
Since RECNO() is not supported as a Calculated field in a form, is there
another way to use record number as a key on a multi-record form which will be
placed on a multi-table form to create a many-to-one relationship with
automatic sequence generation. That is, without writing a dataentry script or
having to enter the sequence number manually?
Fm: John Rendell 70474,377
David - think about what you are asking.
If you base the key of a record on record number, you should be ready to
handle all sorts of problems that will crop up (a whole lot more code than a
basic data entry script).
For instance, say you have 3 records. Each has a key based on the record
number (1, 2, 3). Now Delete record 2. This leaves 1 and 3. Now insert a
new record (IF it is at the bottom of the table, it will be record 3,
otherwise, it might be 1,2,or 3). Immediate key violoations.
The best way to handle this is with a little bit of Pal. It can be done in
approx 10 lines of code that could be attached to a setkey.
If you are trying to stay away from writing code, you may want to check out
WaitPlusPro - a data entry system that can be as simple or complex as you
wish. If you are using 3.5, you might want to look at Command Center(there
may be 4.0 version out - I'm not sure).
#: 229381 S4/Forms/Handling Data ·
24-May-93 13:15:04
Sb: proc place on frm
Fm: David Rudd 76264,1765
To: techsupp
Is there a work around for placing a user-defined procedure call in a form for
editing (outside of using DE Kit). For instance: placing as display
Min2hhmm(Minutes) where Minutes is a number and Min2hhmm converts Minutes to
hh:mm string format? Perhaps I am missing something in the available time
conversion functions?
Fm: Harry Goldman (TeamB) 75300,1733
You can place a caculated field on the form to convert this.
Assuming that you are storing the number of minutes since midnight, to
display HH:MM use:
Strval(Format("W2,EZ",Int(Minutes/60))) + ":" +
Strval(Format("W2,EZ",Mod(Minutes,,60))
Fm: Steve Caple (TeamB) 76711,520
It sounds like you want to place a calculated field. You can't place
user defined procedures in these, but you can write fairly complex
expressions.
Assuming a variable or field called Minutes containing a number 1235 for
example, try the following expression:
strval(int(Minutes/60))+":"+strval(mod(Minutes,60))
^ ^
#: 229927 S4/Forms/Handling Data ·
26-May-93 18:15:52
Sb: Popping tables
Fm: Tom Bates 76427,353
To: ALL
Why do tables pop up over forms all the time? Here's my problem.
I view a table. I pick a form for that table, which takes up the whole
desktop display. Fine, since this is a data entry screen and I don't want the
user to see the table. Now, I view another table. Guess what? The FIRST
table pops on top of the data entry screen. WHY? Who told that rogue to make
an appearance?
Fm: Brian Bushay (TeamB) 76711,516
You can't view another table with out getting out of FormView. When you
do that the table image becomes current. The current table is always
on top.
Solution: when you bring a table up for the first time if you don't want
to see it again move it off the visible portion of the screen
Fm: Tom Bates 76427,353
Let me see if I understand your explanation.
I view a table, and go into form view. The table is hidden beneath the
form since the form takes the whole screen. Now I view another table. Before
that table pops up, the first table appears on top of the original data entry
form. Now if I remove the new table, the previous TABLE view is current, not
the form view, correct?
Say I move the table view off the screen by doing SetAttributes
["originrow"]=1000 before loading the second view. When I unload the second
view, is the current window the one that's not visible (the table view)?
Also, I tried this: load both tables and forms, then switch windows
using "Window Select". Guess what? When I select the FORM window for the
second table, the two TABLE VIEWS come along for the ride. What I want is
just the big data entry form on bottom, and the little lookup form on top. It
seems like my only way to do this is move the table views off the screen.
If so, this tells me that in order to convert my application, I really
need to carefully manage the window handles for all views - tables and forms,
and move them on and off the desktop as required.
Thanks for your responses. I'm still trying to fully understand the
window/canvas/image/table/form concepts. The manual just doesn't seem to
explain it in a way that I can grasp. It reminds me of the days before I
fully understood the conventional/upper/EMS/XMS memory concepts of DOS.
Fm: Brian Bushay (TeamB) 76711,516
> Let me see if I understand your explanation.
>I view a table, and go into form view.
>The table is hidden beneath the form since the form takes the whole screen.
it may be hidden but the point is the formView is the current window and the
current window is always on top
>Now I view another table. Before that table pops up, the first table appears
>on top of the original data entry form.
Anytime you leave a form the table window associated with that form becomes
the current window, so it moves to the top. Then your free to move to other
windows
>Now if I remove the new table, the previous TABLE view is current, not the
>form view, correct?
Yes
>Say I move the table view off the screen by doing SetAttributes
>["originrow"]=1000 before loading the second view. When I unload the second
>view, is the current window the one that's not visible (the table view)?
Use WINDOW MOVE
Yes the table view you moved is current and on top of the Z order but since
it is off screen it doesn't obscure the form
> If so, this tells me that in order to convert my application, I really
>need to carefully manage the window handles for all views - tables and forms,
>and move them on and off the desktop as required.
That is the point you needed to get<G>
Fm: Tom Bates 76427,353
Thanks for the info. It's amazing how the right combination of words
and sentences can make the light go on in someone's mind!<g>
And that little tidbit "WINDOW MOVE"...I was doing it the hard way!
#: 229980 S4/Forms/Handling Data ·
27-May-93 00:41:01
Sb: Incorrect Total-Calc
Fm: Alex M. Kelso 74710,2070
To: SysOp (X)
SysOp......Problem: I can't subtract a linked field from a summarized total
(and incidently <g>) get the correct answer.
Process: [price] - ([price] * ([Disc%] * 1/100)) = Correct Answer
If I subtract a linked field from a table, the last detail entry
that is summed is only used, not the sum of the group:
17th entry 183.92 ok
Example: 18th & last entry 81.90 ok
Sum Total is 3,150.00 ok
Monthly Rent - 150.00 Linked
Total (68.10)
Formula used is:
([price] - ([price] * ([disc%] * 1/100))) - [vendor->morent]
If I take away the [vendor->morent] the correct sum shows
Fm: Brian Bushay (TeamB) 76711,516
And where are you summarizing a total?
There is no problem with the above formula but It is not being
summarized.
Also not that any linked fields will be summarized once for every record
in the table being reported on not once per linked field.
Fm: Alex M. Kelso 74710,2070
Brian.....I don't understand your response.......The linked field is in a
vendor name and address table and the detail table of transactions is
where I am running the report from. I am grouping on vendor so that
I'll read the same record....But.....I am summarizing by my selection of
summary on the report screen....
#: 230140 S4/Forms/Handling Data ·
27-May-93 21:10:23
Sb: multi-column forms
Fm: Tim Serges 71611,3655
To: anyone
I am using Pdox 3.5 I have created a multi- column form 2 pages long. I wish
to use the enter key to move down a column after entering a value for each
field in a column. However, when I enter a value in a field the Enter key
moves horizontally to the next column. How can I control the direction. Also
when I reach the bottom of one column. I wish to go to the top of the next
column of fields. When I reach the end of the last column first page, I wish
to go to the next page first column on the form. I expect to use the Wait or
Setkey but how?
Fm: Brian Bushay (TeamB) 76711,516
There is one trick you use when building forms that gives you the appearance
of movement that you want. What you do is build 2 pages that look identical
but the fields in one column are regular fields and the fields in the other
column are Display only. Alternate the column that is Display only on the
next page. Movement will be from regular field to regular field.
When using Wait you need to keep track of which fields to moveto.
one way you can do this is to keep a Dynarray of Fields that your on and
fields you should move to.
;The following assumes you have 2 columns with 5 rows and fields named
[Field 1] - [Field 10]
Dynarray movement.y[]
;define like this
;current field ;field to moveto
movement.y["Field 5"] = "Field 6"
;Then in your Wait Procedure attach code like this to your Depart field
procedure
Case event.y["keyCode"] = ASC("Enter") ;when key is Enter
If IsAssigned(movement.y[Field()] Then ;If exception movement
Moveto Field movement.y[Field()] ;move to that field
Return 1 ;stop trigger cycle
Else ;No exception defined so we will translate to down
event.y["keycode"] = ASC("Down")
Release vars event.y["ScanCode"] ;need to release ScanCode
Return 0 ;the Wait will now process this key as if it was DOWN
Endif
Fm: Thomas P Knox 70410,764
In Brian's response, he may have missed your opening remark that you are
using 3.5. Since dynarrays aren't avaiable in 3.5, you can substitute a
fixed array that uses the colno() of the field you are in for its index
and the name of the field to move to as its value (remember that the
first field in a table is COLNO() = 2. The record number is COLNO()
= 1)
You also have the problem of not having the DEPART triggers available.
But if you trap for the Enter key in your wait, part of your code
would be:
array FieldArray[10]
FieldArray[2] = "Date"
FieldArray[3] = "Amount"
FieldArray[4] = "SomethingElse"
<etc.>
switch
case KeyPressed = 13:
moveto field FieldArray[colno()]
case ....
if you were in the first field of the table, then pressing enter would
move you to the [date] field. If [date] was the 2nd field in your
table (column number 3) then you would move to the [amount] field, and
so on.
Fm: Steve Caple (TeamB) 76711,520
The non-PAL answer to this is the old "wallpaper" solution (from an
early - version 1.1? - tool box item): Make a _4_ page form - pages 1
and 2 look the same, only in page one the column B fields are display
only, and in page 2 the column fields are d.o.; likewise for pages 3
and 4. The natural cursor movement will be just as you desire.
However, this will not allow a user to move horizontaly with the arrow
keys when the spirit moves him or her.
The only way to do the latter involves PAL - but only one copy of each
page. If you're interested in a programming solution ask again (but it
should be in Section 2, the section for versions prior to 4.0).
#: 230214 S4/Forms/Handling Data ·
28-May-93 10:58:26
Sb: Default Values
Fm: Maurice Arney 75120,1032
To: ALL
Can anyone tell me how to create a default value which is equal to the entry
made in the previous field? For example:
Part# _____________ Qty Shown: ____________ Qty Counted: ____________
I would like to make the default value of "Qty Counted" the same value that
was entered for "Qty Shown."
I cannot find any help in the Val Check instructions.
Fm: Harry Goldman (TeamB) 75300,1733
You cann't make a valcheck that is dependednt on another field. You will
need to use PAL for this.
The general idea would be:
- Trap for the DEPARTFIELD trigger
- If you are departing the QTY Shown field :
- Check if there is a value in the QTY Counted field.
- Value found: Don't do anything
- No value - Fill in with QTY Shown
#: 230218 S4/Forms/Handling Data ·
28-May-93 10:59:02
Sb: #230200-Lookups
Fm: Tina Grubbe (Sysop) 76711,667
To: Don Wood 71024,537 (X)
The Valcheck |TableLookup will always come up in table view. You can make
lookup tables come up in form view by hard coding the lookup in PAL and
removing the VALCHECK. Something like:
CLEAR
CLEARALL ; starts us with a clean slate
view "lookup"
coedit "mytable" ; puts the main table and the lookup on the workspace
pickform 1 ; Puts main table in formview
while true
wait table ; Allows the user to see the table
prompt "Press F1 for lookup help",
"Press F2 to save and exit"
until "F2", "F1"
switch
case retval = "F2" : Do_It! Quitloop ; saves the changes and exits
; the script
case retval = "F1" : formkey ;get out of formview
moveto "lookup" ;go to lookup table
pickform 1 ;bring up form for lookup
wait table
prompt "Press F2 to copy data to main table"
until "F2"
if retval="F2" ;copy data to main table
then
copytoarray myarray
moveto "mytable"
copyfromarray myarray
endif
endswitch
endwhile
This example assumes that the field for that has the lookup is field one
in your main table. If this was not the case, a person would need to write
PAL code to do the fill-in differently. This example is intended only to
get you pointed in the right direction. It is not intended to be an exact
dictation of your code. You will find the commands used in this example
documented in chapter 20 of the Paradox 3.5 PAL User's Guide.
#: 229238 S5/Queries/Reports ·
23-May-93 17:29:43
Sb: Runtime Report Editing
Fm: James W. Horne 72130,3073
To: ALL
I am developing an application, which will run under runtime, and I want users
to have the ability to edit and/or write new letters that I provide them. It
is small business management software and the type of business requires
customized contracts. I want the users to be able to add or delete parts of
standard contracts as well as maybe the ability to add a new contract. Of
course these contracts will have field drops in them..
Anyone with input on how Pdox handles this problems or if it does not, maybe
asolution....
Fm: larry bradshaw 73777,2741
I'ld use a table structure with one record for each paragraph in the
contract, as the detail table for a master table with one record for
each contract. Then the paragraph or item # can be printed in the
report or file by whatever calcs you need.
#: 229267 S5/Queries/Reports ·
23-May-93 22:20:56
Sb: #229205-Dollar signs
Fm: Harry Goldman (TeamB) 75300,1733
To: Brian Bushay (TeamB) 76711,516 (X)
>>I haven't tried this in 4.0x, but I believe that in previous versions, the $
>>had to be the first operator: E$C.
>
>It hasn't made a difference in any version of Paradox I have used.
OK, maybe I'm just suffering from lack of sleep, but I could have sworn that
there was a problem at one time with the E operator where certain modifiers
had to be in a specific order to make it work correctly.
#: 229294 S5/Queries/Reports ·
24-May-93 01:45:37
Sb: wordwrap proc
Fm: peggy baker 71141,1342
To: Brian Bushay 76711,516 (X)
Brian: I have modified your wordwrap script slightly and am using it with
many thanks and even with general success. However, occasionally I run into a
field which confuses the proc, throwing it into an endless loop. Below is the
modification. It is called as
wrapcount.n = ww5(mem.v,5,63,mem.y)
Here is the contents of a memo field which seems to blow it away:
Leak in garage ceiling notified leak in vicinity of garage opener at celing
Contact to inspect exact location for correction.
Disregarding the fact that they can't spell, there doesn't seem to be anything
I can figure out which would hang this up. Any ideas?
; Disguised as WordWrapThis5 ;
;======================================================================== Proc
WordWrapThis5(text.a,lns.n, wid.n,ww.y) ;Dynarray to place word wrap lines
into
text.a = ""+text.a ;if this is a memo var this line will reset its
;character index is a problem in low memory
;situations after a RUN command
startchr.n = 1 ;starting character possition
wid.n = Min(wid.n,255) ;width can not exceed 255
countno.n = 13
For cntr from 1 To lns.n
ww.y[cntr] = "" ;init dynarray element
takeChrs.n = 0 ;Initialize at 0
trimChr.n = 0 ;Initialize at 0
Switch
Case SearchFrom("\n",text.a,startchr.n) > 0 And ;look for carrige return
SearchFrom("\n",text.a,startchr.n) < (startChr.n+wid.n):
takeChrs.n = SearchFrom("\n",text.a,startchr.n)- (startchr.n-1)
trimChr.n = 1
Case (startChr.n + wid.n) > Len(text.a): ;no more word wrap needed
takeChrs.n = wid.n
OtherWise: ;need to find next space to break at
While true
spacePos.n = SearchFrom(" ",text.a,startChr.n+takeChrs.n)
Switch
Case (spacePos.n - (startchr.n-1)) > wid.n :
If takeChrs.n = 0 then
takeChrs.n = wid.n ;this section can not be broken at a space
Endif
Quitloop
OtherWise:
takeChrs.n = spacePos.n - (startchr.n-1)
EndSwitch
EndWhile
EndSwitch
ww.y[cntr] = Substr(text.a,startChr.n,takeChrs.n-trimChr.n)
startChr.n = startChr.n +takeChrs.n ;rest var
If startChr.n > Len(text.a) then Quitloop Endif ;all wrap lines set
Endfor
Return cntr
EndProc
Fm: Brian Bushay (TeamB) 76711,516
>I have modified your wordwrap script slightly and am using it with
>many thanks and even with general success.
What do you mean by modified slightly?
Someone else found a similar problem that I corrected and uploaded a
corrected version. You appear to have the original.
The change occurs in the second line of the code below
; Switch
; Case (spacePos.n - (startchr.n-1)) > wid.n or spacePos.n =
0: ; If takeChrs.n = 0 then ; takeChrs.n
= wid.n ;this section can not be broken at a space ; Endif
; Quitloop ; OtherWise: ; takeChrs.n =
spacePos.n - (startchr.n-1) ; EndSwitch
Let me know if that fixes the problem
Fm: peggy baker 71141,1342
To: Brian Bushay (TeamB) 76711,516 (X)
>>What do you mean by modified slightly?
I needed it to print some borders and other stuff, so it has to figure
out the word wrap and then how many spaces to throw in before the
borders etc.
Your fix did the trick. Thanks a bunch.
#: 229323 S5/Queries/Reports ·
24-May-93 08:52:14
Sb: TWO QUESTIONS
Fm: brian walker 71327,2532
To: 76711,516 (X)
Two questions:
ONE-How can you get a report to print percentages?
The way my report now looks is that everyting
is that all figures are rounded up to the nearest
whole number.
TWO-Is there a way to write a query that selects only the
fields that have data in them. I have a database where
not all the fields have data in them (yet). Is it easier
just to scan the file and look for empty fields and not
select them?
Fm: Les Gainous 72731,146
RE: How can you get a report to print percentages? The way my report now
looks is that everyting is that all figures are rounded up to the nearest
whole number.
If you are using PAL, use: ROUND(yourPercentage,2)
This will output your percentage rounded to two decimals.
If you are using the report generator, Reformat your field with two
decimal places.
Fm: Brian Bushay (TeamB) 76711,516
> ONE-How can you get a report to print percentages?
> The way my report now looks is that everyting
> is that all figures are rounded up to the nearest
> whole number.
You have lost me with this question. I don't know what rounding of decimal
places has to do with percentages. How about an example of what your trying
to do?
> TWO-Is there a way to write a query that selects only the
> fields that have data in them. I have a database where
> not all the fields have data in them (yet). Is it easier
> just to scan the file and look for empty fields and not
> select them?
The BLANK operator can be used to select for a blank field value
NOT BLANK can be used to select for a non blank field value.
#: 229327 S5/Queries/Reports ·
24-May-93 09:02:54
Sb: #229217-'IF' in reports &queries
Fm: Dan Ehrmann (TeamB) 70007,4644
To: James E. Arnold 71053,1503 (X)
I prefer your second approach, using a new field to hold the Date_In from the
previous record. You may need to use a PAL scan loop to pick up those field
contents and move them down to the new field in the next record, but this
should be pretty easy.
Fm: James E. Arnold 71053,1503
The SCAN loop works great. Just had to assign a variable and type it
into the next record. Now the entire application runs in one giant
Script without having to go to Paradox.
#: 229384 S5/Queries/Reports ·
24-May-93 13:39:02
Sb: PARADOX 4.0 / DOS
Fm: DHAWKE 70303,2151
To: ?
Looking for a method in Paradox 4.0 for developing a two column report, from a
single field, with the following characteristics:
1. Sorted alphabetically down the page.
2. Grouped by A's, B's, C's etc...
i.e.
Aa Ae
Ab Af
Ac Ag
Ad
Ba Be
Bb Bf
Bc Bg
Bd Bh
Fm: Steve Caple (TeamB) 76711,520
I'd probably do it all in PAL (hope that isn't bad news, but I don't
think there's any easier way).
One piece of information you need is the number of values in each initial
letter group. I think I'd start by looking at using a dynarray, reading
the items in as I stepped through the table, stopping when the initial
letter changed, and then printing out the items assembled in the
dynarray. I'd first try using a counter as the dynarray index.
#: 229395 S5/Queries/Reports ·
24-May-93 14:07:56
Sb: query
Fm: Nancy A. Peterson 72143,2632
To: sysop (X)
trying to extract the maximum date for each item# on a table with fields item#
and date (multiple entries for item# with differing dates). able to use set &
max operators, but have to key in an item# in query, which i don't want to do.
suggestions please.
Fm: Brian Bushay (TeamB) 76711,516
>trying to extract the maximum date for each item# on a table with
fields item# >and date (multiple entries for item# with differing
dates). able to use set &
Yourtbl | Item # | Date |
| Check | Calc Max as "Max Date" |
#: 229412 S5/Queries/Reports ·
24-May-93 15:04:17
Sb: RPT PROB - REVISITED
Fm: T. Pat Kelly 6121,47
To: all
I need to start over on this previous raised and answered question.....I think
I'm in the forest looking for that lost tree; again.
To create a report to show the following:
1. REQ. BY: AAAAAAAAA AAAAAAAAA DATE: XX/XX/XX
2. DATE OF REQ: XX/XX/XX 4. DATE REQUIRD: XX/XX/XX
5 REQ'ING ORGANIZTN: AAAAAAAAAAAAAAA
6. DEPART DTE: XX/XX/XX PRESENTN DATE: XX/XX/XX
8. <<<HERE'S THE PROBLEM>>>>
X DBASE _ LOTUS _ VENTURA
_ X SAS _ MIRAGE
_ QUATTRO PRO _ EXCEL X PARADOX
(There are more selections than shown. Person filling out can select 1 to
N of them. They go into a child table with a 2 field key....the id number
from this parent table plus the other field in this child table...thus,
2 fields; both = the key.
9. <<<<same sort of problem>>>>
__ CLIPART __ HARDCOPY __ GRAPHICS
1 MAPS __ TABLES 3 TEXT
__ SCANNED 2 TRANSPARENCY __ SLIDES
(SAME SITUATION... CHILD TABLE OF 2 FIELDS...BOTH FIELDS = KEY.
USER can add any combination of items.
I query the parent and 2 child tables; get answer table and write it to my
report table. PROBLEM: I can not create a reprot form that provides for the
multi records....they being ONLY #'s 9 & 8.
Is the answer that I have to restructure the parent table to provide a field
for each possible selection and get rid of the child tables for 8 & 9?
I've exhaused every trick I know to create a report form in both TABULAR and
FreeForm to get the multianswer fields (8 & 9), without any luck.
Fm: Brian Bushay (TeamB) 76711,516
The only solution that you can use that will work with the report
generator is to create an intermediary table. This table needs to
have all of the key values for all of the detail record. Then fill it
with Insert Queries
Intermediate table something like this
Parent Key A#
Question # A1 ;will be either 8 or 9 in your case
Description A20 ;Lotus, Ventrua, Clipart ect
Now write the report from this table. Link the master to it. Use a
Group band to separate the different [Question #] records. Use IIF()
in headings to get the proper heading for the grouping
Your other alternative is a PAL report using PRINT for output
#: 229415 S5/Queries/Reports ·
24-May-93 15:16:13
Sb: TWO (Plus one) QUESTIONS
Fm: brian walker 71327,2532
To: 76711,516 (X)
RE: 229323--------
On the screen I have a number .23 which represents 23%.
When I print that number, it appears as a 1 or 0, (I can't
remember which).
RE: 229323 question two.....................
I tried NOT BLANK and it does not work in this instance.
Once again, I have perhaps 30 fields of which about half
are now populated. I only want to view the fields with
data in them.
A new problem............
I have a date field. In the past I have inputed
"12/12/93". When I do that now, I get an error message
"Incomplete field". Paradox is looking for a 3rd digit
in the year field (12/12/093 for example). Any solutions?
Lastly,
I tried calling your technical support hotline (408) 461-9155
and received a message saying the line is disconected.
Is this true?
Fm: Brian Bushay (TeamB) 76711,516
> On the screen I have a number .23 which represents 23%.
> When I print that number, it appears as a 1 or 0, (I can't
> remember which).
Use MENU {Field}{Reformat} to adjust the field to display the required
number of decimal places.
> I tried NOT BLANK and it does not work in this instance.
> Once again, I have perhaps 30 fields of which about half
What do you consider a blank record?
If what your asking for is only those records where all of the fields are
filled in then you would put NOT BLANK in every field
> Once again, I have perhaps 30 fields of which about half
> are now populated. I only want to view the fields with
> data in them.
Since Queries return records, not fields I guess I don't understand what
you mean by the above, how about an example?
> "12/12/93". When I do that now, I get an error message
> "Incomplete field". Paradox is looking for a 3rd digit
You must have placed a Picture {Valcheck} on that date field that is
requiring more than a 2 digit year
> I tried calling your technical support hotline (408) 461-9155
> and received a message saying the line is disconected.
> Is this true?
Not that I know of. I don't work for Borland. I am a volunteer. My
call to the above number to check got a busy single, not a Disconnect
message.
#: 229561 S5/Queries/Reports ·
25-May-93 00:53:40
Sb: #228879-print but nada comes out
Fm: Jeremy Grand [SSI] 73457,2674
To: Thomas P Knox 70410,764 (X)
It appears that novell is being confused by paradox, but the details still
elude me. Possibly SETPRINTER is doing something? Both printers work fine
most of the time, and both are in the same room with me and the server. No
other applications have caused this problem.
I have modified the code to send reports to a file first, but the problem
persists.
Fm: Thomas P Knox 70410,764
Are you sure that when you are running Paradox that you have an active
print queue as defined with a CAPTURE statement? On another
workstation, can you watch PCONSOLE to see your job queue?
Fm: Jeremy Grand [SSI] 73457,2674
To: Thomas P Knox 70410,764 (X)
Thomas, yes, I can watch the console & see the print jobs appearing and
disappearing. They show up for a few moments, then vanish.
Fm: Thomas P Knox 70410,764
To: Jeremy Grand [SSI] 73457,2674
Well, I'm sorta stumped. If you have output that goes into the queue and
leaves the queue, then it's logical to expect to see it in the printer. If
you have other applications printing to the same queue from the same PC then
something is wrong somewhere.
What I would do at this point is start at ground zero:
- reboot computer (cold boot)
- login to net
- issue CAPTURE to queue
- at DOS copy a text file (plain text, no setup strings) to LPT1
= if it came out at printer continue, if not call net admin
- start Paradox and print a simple report for Report Generator
= if it came out, continue, if not call net admin
- if Paradox can send a simple report, try your app that creates a file
and send the file to the printer.
= if this doesn't work, but the rest did then:
- did this file end with a form feed?
- is the printer on line?
- is the data stuck in the printer's buffer (or other spooler)?
- is there an odd or errant printer code in the file causing the
printer to not print.
- if you get to this point and still no luck, send me a copy of the file
that you see in the queue, but doesn't come out of the printer.
#: 229593 S5/Queries/Reports ·
25-May-93 09:17:14
Sb: #229534-offset columnar repor
Fm: Franchesca Chandler 70703,1046
To: Steve Caple (TeamB) 76711,520 (X)
I'm again working with linked tables of shop work orders. The master
table is a table of work orders, with linked detail tables of parts and
labor.
The client wants finished job orders printed on a custom pre-printed form
with this format, and the common information is the job order number. I'm
trying to print the informatio in this offset manner
Qty. part # Description cost amt.
--- ---------- ---------------- ---- ---- tech repair
--- ---------- ---------------- ---- ---- time no. instructions code amt.
--- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
--- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
--- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
--- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
--- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
I still have your outer-join solution from when I first asked about this
problem, but I'm confused.
I created two small sample tables.
A:
----Job Order----Quantity----Part number-----Part Desc-----Cost--------
1 : M20 : 2. : 11119 : widget : 2.25 :
2 : M20 : 2. : 33666 : Belt : 3.50 :
3 : M20 : 3. : 22334 : other : 5.25 :
B:
--------Job Order----Operation------------Description-------Mech
1 : M20 : 1 : lubricate and inspect : 2 :
2 : M20 : 14 : valve lash adj : 6 :
Either way I query them I get six records and don't see how to use what I
get there are no blank records that I can make use . Can you help me?
(again)
Fm: Brian Bushay (TeamB) 76711,516
Sorry but your report layout falls into the "Can't do it with the Report
generator" category. The reason is that there is no way to relate which
record in Table A goes with a record in Table B
> Qty. part # Description cost amt.
> --- ---------- ---------------- ---- ---- tech repair
> --- ---------- ---------------- ---- ---- time no. instructions code amt.
> --- ---------- ---------------- ---- ---- ----- --- --------------- --- ----
The drop down header you have on the right is also a problem.
Your going to have to write PAL code to produce this one with PRINT commands
Fm: Steve Caple (TeamB) 76711,520
I don't think there is meant to be any relation between the parts and labor
lines - at least there never is on any of my garage receipts.
My approach to avoid the product problem (3 Parts recs * 2 Labor recs = 6
Answer recs) would be to:
* query out the Parts and Labor recs for a given order; include a "calc 1
as Line Nbr" in one of the fields
* rename both tables to something temporary
* insert 2 "blank" recs (work order # only) at the start of the Labor
answer, and
* get both table sizes
* if the Parts answer size was less than the Labor answer size (note:
includes the recently added "blank" records), add enough blanks at the
END of the Parts answer table to equal that number
* SCAN both tables changing the Line Nbr field to recno()
* NOW - INSERT query the parts answer table (it is always either larger or
the same size as the labor answer) into an emptied report holder, then
CHANGETO query (matching on Line Nbr) the labor field info into place
* run the report, linking in order material via work order #
I know it seems like a lot of steps, but it can go surprisingly fast - keyed
and small it should really fly.
>> Franchesca: I could not find the earlier reply, it must be before
March 92 (I only have back a year).
#: 229609 S5/Queries/Reports ·
25-May-93 10:05:56
Sb: Wildcard Delete Query
Fm: CRAIG ADAMS 72002,1471
To: craig adams
I am using Paradox 3.5 and trying to compose a query. What I am doing is the
following:
1. Setting a variable called deletetext to the following:
deletetext="..tkmusa0c.." 2. Doing a query using the variable as follows:
Query
Labfile | Text |
delete | ~deletetext|
Endquery Now, if I type in this query and enter the text manually it
deletes the appropriate records. But when I do it this way I get an empty
DELETED table. Is there any reason for this?
Fm: Brian Bushay (TeamB) 76711,516
> Labfile | Text |
> delete | ~deletetext|
>Is there any reason for this?
Because tilde variables can only represent literal values. Wild cards
can not be used within a tilde var
What you need to do is
Query
Labfile | Text |
delete | |
Endquery
MoveTo [Text] Typein deletetext
Do_it!
#: 229766 S5/Queries/Reports ·
26-May-93 00:16:24
Sb: #228943-Export Ascii Fixed Field
Fm: Jeremy Grand [SSI] 73457,2674
To: Ross Williams 71344,3465
Download FLEXPORT.ZIP from one of the libs (forgot which one!). With it you
can turn a .dbf file into a quote delimited, comma separated ascii file. Use
ExportImport/Export to turn your pdox table into a dbase .dbf file.
Flexport is pretty fast, and a whole lot simpler than making a report for this
purpose.
#: 229898 S5/Queries/Reports ·
26-May-93 15:03:48
Sb: IIF
Fm: Cynthia Guinn 76264,1026
To: SYSTOP
I have a table with the fields: date, time, type. Type is a flag for
different types of appointments. I need to create a report that prints the
date and time on a condition from the type field. I've been trying to use iif
but can't figure out how to do it without getting blanks. Example:
iif([type]="INIT1",[date],"") will return the date but will also print
person's name on line with a blank for this field as well. Help.
Fm: Dave Schlieder ( SLI ) 72460,3561
You can not "Filter" a report in this fashion. If you only want to report
on records where [Type] = "INIT1", then the first step is to perform a query
on the table such as this:
{Ask} Select "MyTable" ; replace "MyTable" with your table name
CheckPlus ; check off all of the field in the table
[Type] = "INIT1" ; select only those records where [Type] = "INIT1"
Do_It!
CopyReport "MyTable" "R" "Answer" "R"
Report "Answer" "R"
#: 229958 S5/Queries/Reports ·
26-May-93 21:04:05
Sb: AVERAGE
Fm: JOHN KLIEGL 70372,3007
To: ALL
I have 3.5
I have written a baseball report that averages at-bats and hits
the averages total (per player) print correctly. My problem is that I want to
average total team-hits/ total team-at-bats and I can't get the correct avg.
example AB H avg.(calculated)
______________________________
name 100 24 .2400 -- calc field
name 163 56 .3436 -- calc field
_____________________
total 263 80 xxx --- I want xxx to be 80/263
|
calc field
If I sum the group 80+263 I get the correct answer but if I divide it I get
the wrong answer.....What Gives ???
Fm: Brian Bushay (TeamB) 76711,516
Use a calculated field
Sum([H],goup)/Sum([Ab],group)
#: 230106 S5/Queries/Reports ·
27-May-93 17:16:13
Sb: Multi-tables vs. queries
Fm: Tom Bates 76427,353
To: ALL
If I design a truly normalized database, is that going to make it harder to do
moderately complex queries?
For example, if I have an inventory file that relates to a product file and a
location file, and I want to find all the inventory items that start with
"Inter" in "accounting", do I have to do several independent queries to get
what I want; i.e. query the product file for all products starting with
"Inter" and query the location file for all the accounting locations, then use
those keys to query the inventory file? OR can I use a multi-table form and
do a QBE?
P.S. Oops, replace "file" with "table" in the above message....gotta get my
nomenclature right!
Fm: Bill Darron 70650,2212
It sounds like you need to link the tables doing a query.
If you have an inventory table with a part number, and a product table with
a description amd the same part number field, as well as a location table that
would tell you what bin the part was in (also uses the same part number) you
could get the answer in one shot. Maybe you have a series of tables:
PRODUCTS.DB INVENTORY.DB LOCATION.DB
Part Number S* Part Number S* Part Number S*
Description A30 Quan Avail S Bin Number S
Then you could query:
x= the part number you want to find
Query
Products | Part Number |
| _1,~x |
Inventory | Part Number |
| Check >0 |
Location | Part Number | Bin Number |
| _1 | Check |
Endquery
If you were looking for part x, this query would tell you the location of
the part if you had one or more, otherwise you would have an empty table.
#: 230198 S5/Queries/Reports ·
28-May-93 08:47:14
Sb: Query Forms
Fm: Andrew Shimberg 73727,2270
To: ALL
Currently, we are using Paradox 4.0 for DOS. We would like to create forms
(data entry screens) that allow users to enter information. This information
will be inserted into queries to run on the relational database tables. Is it
possible to create these forms that will accept data and place he information
into the appropriate places in the query. If this is possible, whatis the
proper approach. I appreciate your assistance.
Fm: David J Murphey (Sysop) 76117,1032
I use a dialog box to accept values for fields and then assign those
values to a query form.
Fm: larry bradshaw 73777,2741
To: David J Murphey (Sysop) 76117,1032
I presented an advanced approach to this, a hybrid of Query by Form and
Query by Dialog which only allows the entry of existent query criteria
IE field contents placed in the query must exist in the target table(s).
Which means that if a city is spelled four times in the target table it
appears four times in the criteria picklist! Also, the query criteria,
once selected, are saved as a query criteria selection set, on query
criteria to a field, in a table "Settings.DB" and are available for
later use - either for the same report or a different report.
It's in LIB7 (as I recall), and is named "Cis_App.Zip". With over 3500
lines of Paradox 4.0 source code, utils and Waitproc and DialogProc
examples, I hope it is a useful donation to the Paradox development
community. It is free; all source code is included. Downloaded
several hundred times the last time I looked.
BTW, the objective of this training application is to provide a system
whereby CIS messages may be stored in Pdox tables in memo fields &
retrieved. 'Course exercises are left to the student & many other uses
of this technology exist.
Fm: Brian Bushay (TeamB) 76711,516
>If this is possible, whatis the proper approach. I appreciate your
>assistance.
This is generally referred to a Query by form. It requires that you use
PAL to get the information from the form to the Query. If you download
Danutl.exe from lib 7 there is an Example in there of how to program the
technique.
QryDlg.zip is a related subject for Query by DialogBox.
Fm: Dan Ehrmann (TeamB) 70007,4644
You can easily use forms or dialog boxes to accept selection criteria
which are then inserted into the underlying query images using PAL.
Use an "analog" table with alpha fields in place of the N and D fields,
so that ranges can be entered by your users. Use a Wait Record to limit
dataentry to one record. Grab the results using a CopyToArray, then
display a query image and walk the fields, doing a "TypeIn" on any
non-blank array element into its field. Be sure to check the Window()
after Do_It! in case the query was invalid. For safety, check and
remove the CHANGETO operator if it was typed in by the user.
For more information, you might want to get hold of a copy of my
recently published book, "Paradox Queries - A Developer's Reference",
which discusses these techniques extensively. You can find it at your
local bookstore, or call 312-663-0101 to order a copy from my office.
#: 230545 S5/Queries/Reports ·
31-May-93 18:34:08
Sb: Control field squeeze?
Fm: Gerry Eichner 71052,2400
To: All
We have a Membership Table with [Last name] and [First name] fields. I'm
trying to get a free-form that mimics a regular columnar report, allows the
two name field to "squeeze", but doesn't allow the keeps the other reports in
their proper columns.
If there isn't a way for me to control field squeeze, then the only other
way I see(if there are other easier ways, please, tell me) is to get the two
name fields to come together into a single field in a new table with a
different structure.
NAME ADDRESS CITY \
Smith, John 123 Drive Dr. New York | what I'd like
Jones, Sue 456 Road Rd. Hoboken /
Smith, John 123 Drive Dr. New York \ what I get at present
Jones, Sue 456 Road Rd. Hoboken /
Fm: Steve Erbach (NEWPALS) 70620,3432
You can use a Calculated field for the name:
[Last name] + ", " + [First name]
Note that the comma and space are placed in quotation marks. The other
fields may be placed as regular fields. You can leave Field Squeeze
off.
Fm: Brian Bushay (TeamB) 76711,516
Do not use FieldSqueeze. For the fields you want to be together use a
Calculated field.
Fm: Harry Goldman (TeamB) 75300,1733
You will need to use a slightly more complex calculated field to do what
you want:
Format("W30,AL",IIF(Not Isblank([First_Name]),[First_Name] + " " +
[Last_Name],[Last_Name]))
Notes:
(1) This should all be on one line.
(2) Change the format width (the "W" parameter) to the size you need
(3) Change the field names as needed
Fm: John B. Moore (TeamB) 71333,1775
Place the Lastname/Firstname in a calc field.. It will look like this..
[LastName]+", "+[FirstName]
Fm: Harry Goldman (TeamB) 75300,1733
The problem with [Field1] + [Field2] is that they do not force a fixed area
to be allocated to the field. You said that you wanted field squeeze, but
that you wanted columns to. Using that method you will get:
Field1 Field2 Field10 Field11
Field3 Field4 Field12 Field13
Field5 Field6 Field14 Field15
Both columns are squeezed, but they are not properly alligned.
Using the FORMAT() function will set aside a fixed area for each field
combination and thus allow for proper formatting of the columns as well as
squeezing teh fields.
Fm: Steve Erbach (NEWPALS) 70620,3432
Harry, fussbudget that he is, has given you the most all-encompassing solution
to your question. His method avoids the acute embarrassment you would feel if
any of the [First name] fields in your table were blank. His method can be
applied to your requirement of placing the [Last name] first as well:
FORMAT("W30", IIF(ISBLANK([First name]), [Last name], [Last name] +
", " + [First name]))
So, if any of the [First name] fields _were_ blank, you would not see the
following on your reports:
Name
-------------------------------------
Adams, Roger
Bradley, Will
Carson,
Dowd,
Everhard, James
...
#: 230640 S5/Queries/Reports ·
01-Jun-93 08:10:54
Sb: PRINT
Fm: Garrett Mattingly 76150,2427
To: ALL
Has there been any change in the way Paradox handles PRINT commands in 4.0 ?
One of our developers here says that a chunk of code that had been working
under 3.5 no longer works under 4.0. Specifically he says that something
like:
PRINT setup_string
REPORT "MYTABLE" 1
Does not work. (ie. The setup string gets ignored.) We know that we can
place calculated fields etc. We are curious as to whether anyone has some
insight.
Fm: Brian Bushay (TeamB) 76711,516
>Has there been any change in the way Paradox handles PRINT commands in 4.0 ?
> PRINT setup_string
> REPORT "MYTABLE" 1
There were no changes in PRINT that I know of. Are you sure you had this
working in 3.5?
If your reading setup_string from a [field] you probably getting the literal
character values in the variable. "\027" is the escape character if this
value is in a string. But if the value is in a field its just a 3 ASCII
characters.
#: 230681 S5/Queries/Reports ·
01-Jun-93 14:35:24
Sb: Matching in a Query
Fm: Doug Walker 75360,2004
To: All
I am looking for a way to find matches in a query. What I have is a table with
all of the answers for different courses. I then have the person answer in
another table. now I would like to be able to compare these 2 tables and come
up with the matches and where they are wrong.
Is there a way to do this with a query??
Fm: Brian Bushay (TeamB) 76711,516
That seems to fit the description of a not In Query
Table1 | Course # | Answer |
| _C, Count=0 | _a |
Table2 | Course # | Answer |
| Check _C! | Check _a! |
#: 230682 S5/Queries/Reports ·
01-Jun-93 15:13:57
Sb: Delete query
Fm: Ben Shulman 74017,2146
To: all
I need to construct a query that will delete records from a child table that
have no matching master record in the parent table. There is only one key
field to link on. For example, I have a project table that has one record per
project, and a room table that can have many rooms per project. How can I run
a delete query to delete all rooms that have no matching record in the project
table?
Fm: Brian Bushay (TeamB) 76711,516
I don't believe that is possible with a Query. You can use a Not In
query to get the records that are not in the Child table then use
SUBTRACT to remove them from the Parent table
Master | Key | Other fields |
| Check _k! | Check |
Child | Key |
| _k, count=0 |
Now Subtract Answer from Master
>The example you suggest will only delete a parent if it has no children.
>Query can't do it, huh? Too bad.
Just reverse that table names in the example I sent.
#: 230692 S5/Queries/Reports ·
01-Jun-93 16:01:34
Sb: Sub & Supersets
Fm: MICHAEL J. VALENTI 75230,2004
To: Sysop (X)
I'm working on a report in which a group footer totals have to computer
percentages based both on superset of the detail table and several distinct
subsets of the detail table (i.e. sub-totals based on a status code field in
the detail table band. For a variety of reasons, I prefer to avoid using PAL
and was hoping to generate a set of answer tables representing each sub or
superset, and then using linked calculated fields. I've never attempted this
particular approach before (look ma, no net) and just wondered if it seems
basically practical before proceeding. Would appreciate comments or
suggestions.
Fm: Brian Bushay (TeamB) 76711,516
If your grouping on the field that you want to do the subtotals on then
it may be feasible. Just remember that the report generator is a one
pass operation. So the Total for a grouping is not available until the
last record of the Group is processed. If you need a total before that
you will have to do it in a query before the report and either assign
that value to a variable or get the value/s into a table that you can
link as a lookup.
That's all the advice I can give with out knowing more details on your
data and how you want the report laid out.
Fm: MICHAEL J. VALENTI 75230,2004
Thanks. Your response pretty much validated my feelings. Now for my daily
idiot question. How does one frame a general query to select records
from the current "period"? Obviously, specifying something like >6/1/93
works in ad hoc mode; but what if a general saved query is required for
use in scripts. Tilde variables at least supported an at "runtime"
solution to this problem in 3.5 but I see no reference to tilde variable
in 4.0. Have they been abandoned? What was meant to replace them?
What's a poor boy to do? How can I ever accomplish this task? (I think
you get the drift %-})
%: 229869 S1/New Users/Misc
26-May-93 09:17:40
Sb: #229848-Dialog restrictions?
Fm: Brian Bushay (TeamB) 76711,516
To: RANDY SINCLAIR 76450,1507
>QUESTION: What is the best method for data entry where speed is the driving
>factor?
Any answer of this will depend on the particular circumstances of your data
entry Using Dialog boxes instead of Forms will give you a small speed gain
by not having to open the form. For a Complex form it can take a few seconds
to open. However your not going to be able to produce a Dialogbox as complex
as a form with multiple embeded tables so I don't think the time saving is
significant. There are more triggers available in a Wait than a Dialog box
so if your data needs any type of Validation using a WAIT is probably faster
for data entry.
>I use a data entry table to protect the real database tables from corruption.
If your users are in the habit of rebooting in the middle of a data entry
session your technique should help.
#: 230766 S5/Queries/Reports ·
01-Jun-93 21:59:48
Sb: Finding Duplicates
Fm: Kate Atkins 71730,1235
To: sysop
Is there a query that will bring up only the records that have a duplicate in
a specific field? We have a barcode table of 124,486 records, but only
124,361 of those records have unique barcode numbers. Is there a query that
will locate the duplicate barcode numbers for us?? Thanks - Kate
Fm: Harry Goldman (TeamB) 75300,1733
You can locate the duplicates with a CALC COUNT query:
Yourtable | Barcode | ...
---------------------------------------------------------
| Check count > 1 |
If you want to see not only the barcodes, but also the number of
occurances change the above to:
Count >1, Calc count all
Fm: Brian Bushay (TeamB) 76711,516
>Is there a query that
>will locate the duplicate barcode numbers for us??
Yes
YourTbl | BarCode | Other fields |
| Check _B | Check |
| _B Count All >1 | |
Use this query some care. It should work fine for your purpose but if
your using it on a table with lots of duplicates or individual values
it probably will run out of disk space.
#: 230980 S5/Queries/Reports ·
02-Jun-93 20:09:33
Sb: Network Report Printing
Fm: Andrew Sweet 71127,2346
To: All
I've written a small invoice program in Paradox 4.0. I've created a single
page report that prints each invoice one at a time on a local printer. When I
set up a capture to print from a Netware 3.11 print server, my invoice is
followed by a blank page. I added the switch /no formfeed to my capture
command, but that didn't stop my invoice from being followed by a blank page.
Any one have a clue to what the problem might be?
Fm: Bill Darron 70650,2212
Our LAN has an option that sends a form feed after each print job. Some
programs do it themselves, so that you end up getting a blank page after
each report. On our LAN, I have the same problem that you speak of
whenever I print from Windows. If I print from within Paradox, I need
to issue a manual command to the Print Queue to begin printing after the
"Sending Report to Printer" Message drops from the screen. I have to
press <Ctrl>+<Alt>+<*> to get the thing to start. Because this is a
manual process, I don't get the extra page.
For any program that does "communicate" with the queue, I get the extra
page. Check with your system administrator about the options on your
print server.
(We have StarLAN (MS LAN Manager 2.0))
#: 231297 S5/Queries/Reports ·
04-Jun-93 03:36:16
Sb: #231172-Running Total
Fm: Brian Bushay (TeamB) 76711,516
To: Mike Reilley 75555,1301 (X)
>Table 1 contains a Total Balance
>Table 2 contains detail records with an amount field to be subtracted from the
>total balance to get a remaining balance.
>Can some one help me to set up the calculation in the report
If your going to use both tables in a report you need a comon field to link
them on. If table 1 only has one record you can set the TOTAL value to a
variable and use the variable in your report.
If you use a variable then the calculated field would be
TotalBalance - [Amount]
#: 231350 S5/Queries/Reports ·
04-Jun-93 12:20:15
Sb: Summary Field ??
Fm: Edward J. Krygeris 76106,2324
To: All
I am looking for a answer to generate a report. The problem is: I have a table
with 4 fields: Month,Date,$A,$B. Now I want to generate a report like this:
Month: 01
Date $A $B %Changes
2 100 100 0%
3 75 50 25%
Monthly Total 175 150 17% <======??
---------------------------------------------------------------
Month: 02
Date $A $B %Changes
16 6 12 -50%
23 10 10 0%
Monthly Total 16 22 -27% <====??
-----------------------------------------------------------------
Yearly Total 191 172 11%
Question: How can generate the Monthly total persentage chages(which the
question mark is pointing to) with Paradox report generator?
Fm: Brian Bushay (TeamB) 76711,516
Place a calculated field
(Sum([$A],group)-Sum([$B],group))/Sum([$b],group)
#: 231482 S5/Queries/Reports ·
05-Jun-93 01:47:25
Sb: Rpt on Screen from Scrpt
Fm: David T. Burhans, Jr. 71234,103
To: Whomever
I can view a report on the screen interactively from Paradox by using the
{Report}{Output} ... {Screen} options from the main menu. When I do that, I
get a nice report viewing menu which looks something like this:
= Go Search Cancel {I especially like being able to go to a particular
page number or to the end of the report.}
When I execute the same set of commands from within a script:
MENU
{Report}
{Output}
SELECT RptName.a
SELECT RptNum.s
{Screen}
I do not get the nice menu above. I really would like to. Can you tell me
how to get that menu when executing the command from a script?
Fm: Brian Bushay (TeamB) 76711,516
If you have a ShowPullDown defined you will not see the System menu.
You can use ClearPulldown to clear your ShowPulldown.
This will give you the report Previewer menu. Once your in the Previewer
you don't have any PAL control until the user exits. I like more
controle with my applications so I sent the report to a file and then
use a routine that pulls the file into the Editor for viewing.
#: 228855 S7/PAL - Learning ·
20-May-93 23:27:47
Sb: Time calculations
Fm: Fazur A. Estrada 72350,463
To: ALl
I am creating a production report in which the user will be entering the
following variables: a) startup time (Ex. 7:00 a.m.), b) Stop time (14:30
p.m.). I need to calculate how many hours that production run was (Ex. 7.3
hrs). Do you have any suggestions on how to do this calculation?, thanks for
your help.
Fm: Brian Bushay (TeamB) 76711,516
To do time arithmetic you have to break time down to its lowest component
Seconds or Minutes if your not keeping track of seconds. Then make your
calculation and convert back.
There are a number of scripts available in libraries 8 and 7 to do this.
#: 229270 S7/PAL - Learning ·
23-May-93 22:26:25
Sb: #228857-Help & Fill
Fm: Mike Downey (CHC) 70404,2657
To: Fazur A. Estrada 72350,463
> changed our product codes ( aprox. 1900 new codes), I'd like to know if after
> an accept command, is there a way to access the Help and fill option available
There is no way to access the Help and Fill option in an accept command.
However, you could place the Lookup table on the workspace, move to it, and
do a Wait Table Until "F2", "Esc" to simulate a Lookup.
#: 229272 S7/PAL - Learning ·
23-May-93 22:35:11
Sb: #229259-Setkey w/Edit and Report
Fm: Dickford Cohn 76226,1572
To: Mark E. Meyer 72260,2524 (X)
Mark, you're absolutely right...I just tried the sequence of events as you
outlined them, in version 4.00. The SETKEYS certainly did not 'stick'. Should
be getting my 4.02 any day now...be interesting to see if this is fixed.
BTW, it doesn't work if you use SETKEY 47 MENU, either....or, for that matter,
PDOX4.00 doesn't seem to accept a SETKEY assignment of any kind in the
{Report}{Output} -or {Report}{RangeOutput} selections. Thanks for bringing
this up...
Fm: Brian Bushay (TeamB) 76711,516
I can't verify that <G>
And I can't duplicate any of the behavior you get from setting "/" key to
invoke the menu.
Also I suspect entering dates will be a problem
Fm: Dickford Cohn 76226,1572
Mark, just got my copy of the 4.02 release...sad to report that this
behavior is *still* the same. IOW, no matter what you do, key
assignments via SETKEY do NOT work within {Report}{Output} or
{Report}{RangeOutput}, nor do they work within the Editor...strange.
Another strange thing...this is the first time I've ever received *eight*
disks to upgrade *two* originals. That said, however...(maybe it's my
imagination<g>), 4.02 seems to impart a 'solid' feel. In other words, it
feels GOOD! And the doggoned thing is *faster* than 4.00 (that's
provable!).
Fm: Mark E. Meyer 72260,2524
Dickford, oh well guess I'll have to issue setkey again for the editor and
forget about using it in the report submenu.
Thanks for the info on 4.02, am about to send in my 15.00 for the upgrade.
Gosh.. by the time I buy all of my upgrades and addins ... I'll have to get
another job just to support my software habbit!
Fm: Dickford Cohn 76226,1572
Sure did, Don...they are 360k floppies, some of the files appear to be 'split'
among several floppies and then re-constructed during the INSTALL process into
one big ZIP file. All the file dates are 4-27-93 with time at 4:02a.
Upon reflection, this *would* be about right, since TUTILITY was not included
in the original distribution of PDOX40 on two 1.2Mb disks.
The other question is still puzzling, however...though it's no burning issue
with me, do you have any ideas as to why SETKEY doesn't work while in
{Report}{Output} or {Report}{RangeOutput} -and- the Editor?
Fm: Don Schubert (TeamB) 70007,4654
Gosh, Dickford. Antique floppies (360k). Anyway, that explains why so many
disks. Of course, I won't mention the fact that the "two disks" that prompted
your question were HD <g>.
SETKEY works for me in Report Range, etc. Do you have something specific you
want me to check? Can't easily try editor because I have an external
specified...
Fm: Dickford Cohn 76226,1572
Yeh! I thought they were 1.2Mb at first...until I checked<g>. I did mention
that I received 1.2Mb with 4.0, didn't I? Thought I did anyway.
As for SETKEY...as Mark Meyer pointed out, can't get it to work in
{Report}{Output} or {Report}{RangeOutput}, nor does it work in the Editor at
all. Doesn't seem to make a difference as to *what* key you assign (i.e. pick
one...any one<g>) *or* what routine you attach. Come to think of it though,
doesn't {Reoprt}{Otuput} shell out to DOS? Maybe that explains it, I
dunno...I do know that the same SETKEYS work in 3.5.
Don't have much use for setkeys myself, so it's not really an issue...just
curious, that's all. I'm sure other folks do have use for this functionality,
though. Thanks.
Fm: Mark E. Meyer 72260,2524
FWIW ... Setkey IS important to me ... and using the "/" key to access the
menus is the most efficient way for me to work. I don't use a mouse, not
even when I at home. I move around alot at work and not everyone has one.
Nor does my editor recogize a mouse (Kedit). For the same reasons I don't
use a mouse with Windows & Excel 4.0a.
>>Don't have much use for setkeys myself<< I am curious though, how others
use setkey ... F10 is toooo slow and hard to reach.
Fm: Dickford Cohn 76226,1572
Mark, I didn't mean to imply that SETKEY wasn't important...it most assuredly
is to folks who wish to use Paradox interactively. In fact, assigning various
routines/macros to certain keys can make interactive Paradox a whole lot
easier to use...it can reduce significantly the number of keystrokes required
for common operations and perform a lot of routine (even complex) functions at
the mere press of a key.
In my instance, my apps are controlled by scripts using WAIT...SETKEYS don't
work in a WAIT. I dunno myself why <F10> or MENU is so slow in 4.xx, though I
don't have problems reaching it. Your use of the slash key would seem to be a
viable alternative for the 'reach problem' -and- would make your key layout
similar to that of Lotus 1-2-3 (one of my favorite alltime programs).
Here's hoping we can find out why SETKEY doesn't work in these specific
circumstances...
Fm: Walt Payne 75020,2707
But don't you use SETKEYS for accessing development tools. Like I use
ALT-F to just jump to PAL-Edit since it is also the key to load a file in
PAL-Edit. And one for PaintPAL and APForm, etc, etc..... sure beats going
through the menu to access them.
Fm: Dickford Cohn 76226,1572
Nope Walt, I don't use SETKEYS for accessing anything in Paradox. The reason
is simple...I use a lot of key re-assignments in DOS...became rather fond of
them. Problem is when I go to someone else's system, they DON'T use these
'hotkeys'. I got so used to 'em that I almost had to re-learn DOS<g>. Same
thing goes for Paradox...if my customers choose to use SETKEYS for their
interactive use, I either have to use their setup, set up my own or use the
menu option keys. I'm so good at these keystrokes by now that it really
doesn't bother me...got my swollen knuckles with Lotus 1-2-3. It's kinda
natural by now<g>.
Fm: Don Schubert (TeamB) 70007,4654
Well, I can get a slash setkey to work everywhere but when you output is being
sent to screen, printer or file.
Fm: John B. Moore (TeamB) 71333,1775
>>F10 is too slow and hard to reach...
Another good reason that IBM messed up the keyboard "standard" for enhance
keyboards. The function keys should be on the left where they belong. (which
is why I use an OmniKey Ultra (Northgate)...)
Fm: Don Schubert (TeamB) 70007,4654
Report Output and RangeOutPut both put you into a different mode and the only
thing that works are standard pdox key functions. Try it in Screen and it's
easier to see.
I was able to try Setkey in Editor on a standard memo field and it works for
me.
Fm: Dickford Cohn 76226,1572
Hmmm, that's what I finally figured out...thanks. How come this'd work in
3.5? Still can't get the SETKEY to work in the editor, though...I don't use
it anyway, I prefer PR. Again, just wondering...
Fm: Don Schubert (TeamB) 70007,4654
Not sure, but I think this is the same as in 3.5. You could do everything up
to the point that you hit enter in Output. Then only a Ctrl-Break would work.
Feels like Pdox is under its own "script control" at that point. I am still
able to use that "/" setkey Mark wanted in Editor.
Fm: Dickford Cohn 76226,1572
Yeah Mark, Excel can be fun. Wish it didn't have to run in Windoze<g>. BTW, I
presume by your reference to "Felippe'" you're referring to the great
Kahn...as in Philippe?<g>
I'm just an old goat who still writes .BAT files in EDLIN and pumps a few
little programs out in DEBUG...heck, one time a monitor went south on a
client's rig. What to do? I didn't have LapLink available, so I booted the
machine and copied the important files via DOS to floppy (after ZIPping them,
of course)...all from commands typed in blind! The client was flabbergasted
(actually, so was I <g>)...probably couldn't do it again for all the tea in
China. Folks do find it hard to believe that the screen is NOT the only
output device a PC has!<g> Try THAT with a mouse.
On my own rigs, I use a home-brewed interface in which I have almost 40 key
assignments in DOS that perform all I need...and these reassignments don't
interfere with apps. It's a bear when I have to go to a 'naked' machine
sometimes...<g>
#: 229281 S7/PAL - Learning ·
23-May-93 23:36:17
Sb: #229260-Dialog box for download
Fm: Brian Bushay (TeamB) 76711,516
To: Mark E. Meyer 72260,2524 (X)
>Or should I send all of the files to be downloaded to my .bat file and shell
>out only once?
If you have more than two files to download your probably better of writing
the batch file to do the downloading. This depends a lot on the speed of
shelling to DOS which will vary with the amount of Real and available memory
that you have.
#: 229325 S7/PAL - Learning ·
24-May-93 08:54:36
Sb: PAL Calculations
Fm: Harold C. Schorr 72056,1640
To: sysop (X)
I have a variable assigned to the total of 12 fields which correspond to 12
months, each containing a percentage totaling 100%. When the percentages are
not whole numbers, but the sum is 100, the variable returns 100, but does not
satisfy "IF varname = 100" condition. Is there a rounding problem that I'm
not aware of. I have V.4.0.
Fm: Les Gainous 72731,146
RE: When the percentages are not whole numbers, but the sum is 100, the
variable returns 100, but does not satisfy "IF varname = 100" condition.
Is there a rounding problem that I'm not aware of.
Use: IF ROUND(varName,0) = 100 THEN
...
...
ENDIF
Fm: Brian Bushay (TeamB) 76711,516
>Is there a rounding problem that I'm not aware of.
Probably. Numbers are stored internally in binary format. Because
decimal fractions can not always be exactly represented as binary
numbers it is common for there to be small difference between numbers
that are directly entered and numbers that are the sum of other numbers.
This is analogous to adding the number 1/3 + 1/3 +1/3 to get 1
If your storing 1/3 as the decimal fraction
.3333333333333333333333333333333 You will not get an answer that is
equal to 1
Solution is to use the ROUND() operator when comparing numbers
If Round(number1,2) = Round(number2,2) then
because ROUND() is also subject to this binary perturbation it is safest
to add a small number to each side of the Round()
If Round(number1+.0001,2) = Round(number2+.0001,2) then
#: 229335 S7/PAL - Learning ·
24-May-93 10:21:53
Sb: Editing MutliTable Forms
Fm: Mark Schoen 71332,3335
To: All
Can anybody help me with how to automate the deletion of a record in a
multi-table form? I can't figure out how to delete the detail record with
the master record in a 2 table mutliple form.
Also, right now I am working with the Application Workshop and I'm
trying to figure out how to get the cursor to land on the detail form
without having to hit the F3 or F4 keys while I'm editing or adding a new
record.
Fm: Dave Schlieder ( SLI ) 72460,3561
To automate the deletion of a master record in a MT form, try this.
MoveTo "Detail"
While NImageRecords() > 1 Del EndWhile
Del
MoveTo "Master"
Del
Of course this lacks all error checking, but this should get you going.
Trying to get the cursor to automagically move to a detail can be quite
involved, but you could trap a DEPARTFIELD trigger to the last field of the
master, change the KEYCODE to the F3 or F4 codes and release the SCANCODE
element.
#: 229382 S7/PAL - Learning ·
24-May-93 13:22:53
Sb: Periodic Proc Calls?
Fm: Scott Dunham 71541,1276
To: All
I'm trying to write an application that puts a table view and a pulldown menu
on the screen in case the user wants to browse the table or do something else,
but the program must also use RUN to start an external EXE file every five
minutes or so without requiring input from the user. I thought maybe using
GETEVENT IDLE would do it, but (ha, ha) it turns out that just because
nothing's happening isn't enough to constitute "idle" to Paradox 4.0.
Fm: David Chu (Sysop) 71333,121
Getevent idle to msgarray
will let you trap for idle events. You can then calculate how much time has
elapsed in order to run your external program. You must make sure that your
getevent is within a loop though. Example:
n = 0
while true
getevent idle to msgarray
if msgarray["type"] = "IDLE"
then n = n + 1
message "Idle event#: ", n
sleep 100
endif
endwhile
Fm: Scott Dunham 71541,1276
To: David Chu (Sysop) 71333,121
I tried something like that, but on occasion the program has to enter a
dialog box or menu, and Paradox doesn't seem to consider "waiting for
input" to be the same as "idle", even if nobody's touched a key for a
week. I have yet to find a use for idle events, as the proc has to be
doing literally nothing before they're picked up...
Am I missing something?
#: 229553 S7/PAL - Learning ·
24-May-93 23:55:32
Sb: pdj931 & PChooseD
Fm: Mark E. Meyer 72260,2524
To: all
I downloaded the PDJ931.arc file from Ziffnet because I'm looking for
examples on how to route the output from a report to a user defined
destination. Among other files there are the PChooseD.sc and PChoose.sc
scripts. I don't get PDJ and there are no readme.doc files included.
Can someone briefly describe how these two files work together. PChoose.sc
calls a dlgbox. But how does it work with PChooseD.sc ??
Fm: Steve Dickinson 75360,237
PMFJI, but suggest you try PRINTT.zip in one of the libs for a generic
PAL-based printout director.
Fm: Michael Radulescu 71561,3647
First your immediate need..
You have to declare the proc. in PchooseD script as dbox proc. for
SelectPrinter() In proc. SelectPrinter, right after the line "ShowDialog"
place:
Proc "SelectPrnDialog"
Trigger "Arrive", "Update"
These are the only two triggers they mention.. If you want to use these
2 scripts as is you have to "play" script PChooseD from within procedure
SelectPrinter (brrrr...) so add a line: Play "PChooseD" on a line, right
after the line "Private....etc" You could write these proc. to a lib and
call from there but for testing this method shoul work.
Now: As Steve D. suggested try forum libraries as well. Also Paradox
Informant (40 something/year) always has great code. Dan Paolini has a
much, much elaborated method for printing reports. Not sure if you can
access PI BBS without being a subscriber but here is the number: (just a
moment gotta load comm programm..) 916-686-4740 no parity, data 8, stop
1, full duplex, baud I guess up to 2400 (?) Dan's code is in PRINT1.ZIP
#: 229563 S7/PAL - Learning ·
25-May-93 01:18:55
Sb: Lookup
Fm: Richard A Sutton 71022,1455
To: ALL
Um...Is there a way for a field to tell me whether or not it has an attached
lookup without pressing any keys first? For example isvalid() will tell me if
a field is valid or blank or whatever. What I would like is something like
haslookup() so I can intercept the actual lookup table and use my own list box
type of thing.
case TriggerType = "ARRIVEFIELD" :
if haslookup() then
DoHelpListBoxProc()
endif
Fm: Harry Goldman (TeamB) 75300,1733
You can do the following to determine if a field has lookup help:
Echo OFF
Help ; Press HELP
; Is there help available ?
Window Handle Image Imageno() To Handles.r["Help"]
If Handles.r["Help"] = 0 Or Upper(HelpMode()) <> "LOOKUPHELP" Then
Esc ;
Message "Lookup Help Is Not Available On This Field"
Echo Normal
Return False ; If no Lookup Help is available quit out of
Endif
The above code assumes that there is a dynamic array for window handles
called: HANDLES.R
The above code will leave you in LookupHelp if there is any, otherwise it
will return you to the calling routine.
Fm: Richard A Sutton 71022,1455
To: Harry Goldman (TeamB) 75300,1733 (X)
That does work, but I was hoping for an algorithm that did not require
all the overhead of going in and out of LookupHelp, since I would like
to use the function every time the user arrives at a new field. It
seems that Paradox knows right away that a field has a lookup table
attached (the speedbar does anyway.) I guess PAL cannot directly tap
into this?? Currently I use a trick with the field name. If a field has
a lookup table attached then the field name ends with _ID as in
Action_ID or whatever...is this bad database design
Fm: Harry Goldman (TeamB) 75300,1733
To: Richard A Sutton 71022,1455 (X)
> Is this bad database design ??
No not necessarily. Another option would be to set a variable or dynamic
array element to show that the field has been assigned a lookup. The
problem with all of these approaches, yours and the above is that it is
too rigid, and too prone to problems. (You change a field from a lookup
to no lookup, and don't change the name or variable....)
I will typically not invoke the kind of logic that I sent you until the
user presses [F1]. Then I will test for the existance of a lookup. I
don't really care in my code until the moment the user presses [F1] if
there is a lookup or not. The code itself is very fast, and Paradox
activating a lookup is pretty fast too. Overall I would say that the
time span between pressing [F1] and the 'No Lookup" message is < 1
second on a 386/25.
Fm: Gary Bement 73507,1204
To: Harry Goldman (TeamB) 75300,1733 (X)
A question about your posting here:
You used: Upper(HelpMode()) <> "LOOKUPHELP" AND
Handles.r["Help"]
to determine whether the cursor was in a lookup window.
I assume you know of a condition where HelpMode() doesn't return a
reliable value. What condition is that?
Fm: Harry Goldman (TeamB) 75300,1733
To: Gary Bement 73507,1204
I have found that there are times when the HELPMODE function is not
reliable, but I have not been able to nail down when, and under what
conditions. I do know that when you are in HELPMODE you will get a window
handle of 0, (system) and by testing both you will alsways be safe.
BE CAREFULL, HELP will send you into the twilight zone if you aren't
carefull.
Fm: Mike Downey (CHC) 70404,2657
To: Harry Goldman (TeamB) 75300,1733
> I have found that there are times when the HELPMODE function is not
> reliable, but I have not been able to nail down when, and under what
The only anomolity I have found is that if another user has the current
record locked, HelpMode() will be "None" whether there is lookup help or
not.
Maybe you could pass on a request to your friends at Borland for a
HasLookup( Table, FieldName ) function?
#: 229638 S7/PAL - Learning ·
25-May-93 12:21:18
Sb: Passing arrays to Procs
Fm: William J. Boyd 71621,2360
To: All
I am using Paradox 3.0. In the PAL users guide on p.296 under the
command reference for EXECPROC there is the following code:
1 procarray = procarray1 ; specify array containing names of procs
2 ; to be called
3 FOR i FROM 1 to ARRAYSIZE(procarray)
4 EXECPROC procarray[i]
5 ENDFOR
Is this an error? Why wouldn't line 4 return a script error because
procarray has not been dimensioned as an array. If procarry1 is dimensioned,
then line 1 will return a script error stating that the [] is missing. If
procarray is dimensioned, line 1 will return a similar error with regard to
missing []s for procarray.
Fm: Harry Goldman (TeamB) 75300,1733
The snipet you copied assumes that Procarray[] has been dimensioned as an
array, that the array is filled with values and that the values equate to
VALID procedure names.
#: 229649 S7/PAL - Learning ·
25-May-93 13:05:36
Sb: CISMSG.ZIP
Fm: Mark T. Houpt 70142,2720
To: all all
To those who have downloaded CISMSG.ZIP to date!
We found a rather glaring error of ommision in our first upload which will
cause certain error in the program. A new version will be posted soon to
correct the error. Drop me a Email with name and address and I will mail
you a corrected version so that you can avoid additional download time.
#: 229652 S7/PAL - Learning ·
25-May-93 13:08:44
Sb: #228774-Locate problem
Fm: Dev Vamathevan (Sysop) 71333,2241
To: Yiu Shih Lee 72360,1005
I have another question about LOCATE. Can we LOCATE a 'Calculated Field'?
i.e. [first name]+" "+[last name] ?
You can use a calculated expression in your locate.
e.g.
locate [first] + " " + [Last]
this will work on a regular field, but not on a calculated field.
#: 229653 S7/PAL - Learning ·
25-May-93 13:08:48
Sb: #229055-Membership
Fm: Dev Vamathevan (Sysop) 71333,2241
To: Rick Andres 70702,2706 (X)
I am trying with great difficulty to understand DataBased Applications. I am
an intermediate Paradox user who has jumped withapplications.
There are three documents that may interest you:
document # 127,124,783
you can request for them by calling 800 822-4269
#: 229677 S7/PAL - Learning ·
25-May-93 15:51:26
Sb: LAST MODIFIED!!! HELP!!!
Fm: David Chiaramonte 71052,1616
To: SYSOP (X)
I need a real quick and dirty solution for this scenario:
Database structure is
Part # A20
Description A20
Price $
Last Update date D
Everytime one of our techs edits a record, we need the LAST UPDATE DATE field
to automatically change to the current date automatically.
Is there a real simple script that can initiate this?
Fm: Steve Erbach (NEWPALS) 70620,3432
Not really. Check with some of the PAL gurus here, but you might try
something like this:
PROC EditParts.u()
.
.
.
COEDIT "Parts"
ECHO NORMAL
WAIT TABLE
PROC "MyWaitProc.n"
TRIGGER "DEPARTROW"
KEY "F2", ...
ENDWAIT
ECHO OFF
CLEARALL ENDPROC
PROC MyWaitProc.n(Triggertype.a, EventRecord.y, Cycle.n)
SWITCH
CASE Triggertype.a = "DEPARTROW":
IF RECORDSTATUS("Modified") THEN
[Last Update date] = TODAY()
ENDIF
RETURN 0
CASE Triggertype.a = "EVENT":
SWITCH
CASE EventRecord.y["TYPE"] = "KEY":
SWITCH
CASE EventRecord.y["KEYCODE"] = ASC("F2"):
DO_IT!
RETURN 1
ENDSWITCH
ENDSWITCH
ENDSWITCH ENDPROC
Fm: Dev Vamathevan (Sysop) 71333,2241
Steve has the right solution to your problem, but I would like to
suggest one little change that may impove the performance of your
application.
instead of trapping for the "DEPARTROW" try trapping for the
"POSTRECORD", this way the wait proc is called only when a change is
made.
Fm: David Berg (Borland) 73020,374
Steve's message is the right direction, but you may want to check out the
TOUCHRECORD or POSTRECORD triggers, that would skip the need to check the
MODIFIED status flag.
#: 229682 S7/PAL - Learning ·
25-May-93 16:40:53
Sb: Case Sensitivity
Fm: Bill Curnutte 76164,1674
To: All
Some confusion regarding case insensitiviy:
The documentation states that Paradox is mostly case insensitive. I do
understand that, for example
wait record
until "f2", "esc", "dos", "dosbig"
switch
case "F2":
...
case "Esc":
and so on, won't work because retval gets assigned the exact quoted string in
the key list.
I also discovered, the hard way, that this won't work either:
getevent to EventArray
if EventArray["type"] = "key" and EventArray["keycode"] = 27 ;Esc
then winclose
But this does work:
getevent to EventArray
if EventArray["TYPE"] = "KEY" and EventArray["KEYCODE"] = 27
The upshot of all this is: is there anywhere in the documentation that makes
clear just what is case sensitive and when (other than string constants)?
As a C programmer, the (relatively) free form syntax drives me crazy. One
solution would be to put EVERYTHING in caps, but, yuck!, that looks like old
Basic. Putting all the keywords in caps would wear out my Shift and Caps Lock
keys in a hurry.
Fm: Brian Bushay (TeamB) 76711,516
if EventArray["typE"] = "KEY" and EventArray["keycode"] = 27
the above works too. dynarray indexes are case insensitive. Paradox is
constant. When Paradox returns a String value and your going to make a
comparison to that string then you need to be sure of the case your using
so with
> wait record
> until "f2", "esc", "dos", "dosbig"
Paradox is returning these values to PAL via retval. The values are
returned as you enter them
> getevent to EventArray
> if EventArray["TYPE"] = "KEY" and EventArray["KEYCODE"] = 27
In this case Paradox is passing the value "KEY" and 27 in the Dynarray
elements.
Fm: Bill Curnutte 76164,1674
Got it! I hadn't tested all the combinations and permutations of the
capitalization of the three keywords, so I didn't know if it was one of
them or all of them or some combination.
The lessons you learn this way are the ones that stick with you. You
know, like accidentally reformatting your hard disk. I did that
once, too, about ten years ago, and have never done it again.
#: 229711 S7/PAL - Learning ·
25-May-93 18:44:59
Sb: Edit Procs/Scripts
Fm: Shirley J Cook 72520,664
To: All
I'm new to PROC's and scripts to create them. I would like to verify my
understanding of this process:
1) A PROC starts out as a script either from 1) RecordScript, 2) Typed in the
Editor, or 3) a combination of the two.
2) The only way to "convert" a script to a PROC is to edit the script and add
the PROC....EndPROC and WriteLib instructions. Then, only the commands
between the PROC and EndProc are actually placed in the Lilbrary.
3) If I have to go back and edit the Proc, I then edit the script. 1) I
remove the Proc...EndProc and WriteLib commands. 2) Make changes and test the
script. 3) Place it back in the library by inserting the PROC...EndProc and
WriteLib commands.
4) After I place a script in the Proc Library, if I want to use the script as
as script, I need to remove the PROC...EndProc and WriteLib commands. Then,
the PROC is available or I can run a script. Alternatively, would it be
better just to run the actual PROC from Alt-F10 (the PAL Menu) and not get
involved with removing those lines from the script?
5) PROC cannot be deleted from a LIbrary. Why not? Makes sense to me!
Fm: Steve Erbach (NEWPALS) 70620,3432
Regarding PROCs...your first two points are correct. In point 2, however, you
may want to consider putting multiple PROCs into one script.
Most PAL developers use a set of scripts to create an application:
1) The main script or scripts that contain all of the procedures. Each
PROC ENDPROC is followed by lines like the following:
WRITELIB libname.a ProcedureName
RELEASE PROCS ProcedureName
2) The library building script which creates the procedure library from
your main scripts. It looks something like this:
; MAKE.SC
libname.a = "Yourlib"
CREATELIB libname.a
PLAY "Main1"
PLAY "Main2"
PLAY "Main3"
INFOLIB libname.a
3) The "run" script which tells Paradox where all of the procedures are
to be found and then executes the main procedure:
CLEARALL
RESET
AUTOLIB = "Yourlib"
Main.u()
Optionally, you may place the last 4 lines at the end of the library building
script so that your script executes immediately after the library is rebuilt.
Fm: Shirley J Cook 72520,664
I finally had a chance to review all the answers to my quetions from earlier
in the week. let's see if I understand your suggestions:
1) For an application, I create and test all the scripts.
2) I then create a "master" script that lists all the scripts with
Proc...EndProc, WirteLib and Release Proc for each script. If I have a
zillion scripts, I might want to group them into multiple "master" scripts.
3) I create another script whose purpose is to build the library from all the
scripts in all the masters where, in your example, Main1 = Master1, Main2 =
Master2, etc.
4) Can't I just set the autolib in the definition of the application?
If that's OK <G!>...
What do I do if I have to edit 1 proc/script? What are the best steps to
take? And, I'm still confused about scripts not running after they are
"coded" to make them into procs. What's the best way to use a script in table
view as well as to simultaneously use it as a proc from the autolib? Should I
not run them as scripts and just load the library and run them as rpocedures?
And, why can't I delete a proc from a library?
Fm: Steve Erbach (NEWPALS) 70620,3432
By golly, I don't think I've ever responded to a message with 6 questions in
it besides being asked to confirm or deny another half dozen assertions! Well,
lets tackle this, shall we?
You're fine up through point #3. However...
>> 4) Can't I just set the autolib in the definition of the application? <<
We have to get some terms straight here. Once you've created the procedure
library that contains all the modules for your application, you must initiate
the application by assigning your library name (or names) to the AUTOLIB
system variable; thusly:
; You've created 3 libraries: one contains all of your Wait handling
; procedures, the second one contains your menus, queries, and printing
; routines, and the third contains your utilities for displaying messages,
; handling errors, etc. You now want to run the application.
AUTOLIB = "Waitlib,Menulib,Utillib"
ERRORPROC = "Errorhandler.u"
READLIB "Utillib" Errorhandler.u ; Make sure this error handling routine
; is always in memory
MainMenu.u() ; Here's the "launching" procedure for your application
Sorry if I repeated myself there, Shirley, but your question about setting the
AUTOLIB in the "definition of the application" threw me a bit. You set the
AUTOLIB variable when you're ready to run your application; that is, after the
libraries have been created.
>> What do I do if I have to edit 1 proc/script? What are the best steps to
take? <<
If there's a bug in a procedure, the PAL debugger will allow you to jump
directly into the script that contains it. You squash the bug, then re-run
your library building script, then run the script that sets the AUTOLIB. The
best steps to take are really the only steps to take; that is, rather than
write one script for every procedure, place several procedures into one
script. That makes editing them a bit easier since one procedure calls
another and if there's a bug in one, there might be a similar bug in another.
So better to have a bunch of procedures in one script.
>> And, I'm still confused about scripts not running after they are "coded" to
make them into procs. <<
I'm not quite sure what you mean here. Again, if you "proceduralize" your
scripts, the most effective way to handle them from there on is to write them
into a library. If a procedure has a bug and you have to edit the script that
contains it, you re-run the library building script to write all of the
procedures in that script back into the library, in essence creating the
library from scratch each time. This doesn't take as long as you think.
Some folks, like Alan Zenreich in his WaitPlus Pro 4, will create several
scripts with many procedures each, but all of them will be written to one
library. Therefore if you have a bug in just one procedure, you either have
to write all of the procedures in that script into the existing library (which
adds to the size of the lib; the old versions of the procs are marked as
obsolete and the fresh ones are tacked onto the end); or you create the whole
library from scratch and write _all_ of the procedures from _all_ of the
scripts into it.
>> What's the best way to use a script in table view as well as to
simultaneously use it as a proc from the autolib? <<
Does this mean that you want to be able to use one procedure kind of in an ad
hoc manner? For instance, say you've got a proc that plays a couple of
queries, copys a report to an answer table and prints. You could do this with
a SETKEY:
SETKEY "F20" READLIB "YourLib" QueryPrint.u QueryPrint.u()
F20 is Shift-F10. This setkey reads the proc from the library and executes
it.
>> And, why can't I delete a proc from a library? <<
Beats me, ma'am. You'll have to ask Borland on this one.
Fm: Steve Caple (TeamB) 76711,520
Shirley, let stick my 2 cents in in addition to Steve's explanation.
On editing just one procedure: If re-"compiling" your procedure libraries
takes too much time, here's a trick I learned from Stephen Ross.
In your application driver script, add a lib to the _beginning_ of your
autolib path, named TEMP or TEST or such. Follow each of your proc
definitions with < writelib LibName ThisProc > (or whatever proc name) and
< release procs ThisProc >. Libname is defined at the beginning of the
Makelib.sc that makes the library and plays all the scripts that define
procs to write to it.
When a proc needs some modification, or for developing a new proc or group
of procs, copy the code to the Temp.sc. This script has the library
create at the beginning, and writes to the TEMP.LIB. When you have the
proc(s) written or edited, play just this script and then play your app
driver script. Even if the proc is an existing one being modified or
troubleshot, and that is in the old .LIB files, Paradox will find the new
version in TEMP.LIB because TEMP is first in the autolib path.
Once everything is working great, move the code back to the appropriate
script. Leave the < createlib "Temp" > at the beginning of Temp.sc. The
< writelib LibName .. > will work where ever it's put down if LibName is
defined. Kallista's PAL-Edit defaults to placing the writelib and
release lines in this style after your proc definitions.
This will allow rapid development and modifications cycles, since only the
small TEMP script has to play.
As for scripts converted to procs not working, if you just add proc and
endproc lines and play the script, nothing will happen. Add a procedure
call to the end of the script and the proc, still in memory, will execute:
proc Whatsis()
... etc.
endproc
Whatsis()
#: 231581 S7/PAL - Learning ·
05-Jun-93 18:16:08
Sb: MODEM control from PAL ?
Fm: David Batten (UK) 100042,221
To: ALL
I have developed a PDOX40/PAL application around my contact database to
organise my routine phone calls. The displayed data form includes the full
numeric telephone number.
Q. Is there any way that PAL can pick up the phone number field, add the
'Hayes-compatible' command codes for my modem, and interact with my modem
serial port to achieve an automatic dial-out?
Ideally I would like a procedure which could sense the outcome of the call
attempt (BUSY, NO-ANSWER, COMPLETED etc) and also measure the duration of a
completed call.
My first problem is knowing how to drive the modem port from Paradox.....
Surely someone, somewhere has done this before? Can you help?
Fm: Brian Bushay (TeamB) 76711,516
To: David Batten (UK) 100042,221
>Q. Is there any way that PAL can pick up the phone number field, add
the >'Hayes-compatible' command codes for my modem, and interact with
my modem >serial port to achieve an automatic dial-out? Yes look in the
libraries you will find several scripts to do that. Dial.sc comes to
mind as one of them
> Ideally I would like a procedure which could sense the outcome of
the call >attempt (BUSY, NO-ANSWER, COMPLETED etc) and also measure the
duration of a >completed call.
You won't get that because it would require reading a serial port
Fm: David Batten (UK) 100042,221
To: Brian Bushay (TeamB) 76711,516
Thanks Brian for the superfast response. I shall certainly look for DIAL.SC
and whatever else seems relevant to automating the dial out.
Concerning a feedback of the outcome and duration, I was hoping maybe PDox
_could_ read the serial port, but no such feature appears from my search of
the manuals.
I wondered if a TSR exists which would pick up the phone number, dial it and
feed something back? I know some 'stand-alone' TSRs maintain address books and
control dialling out. I suspect they also monitor the success of the dialling
process too.
Maybe someone 'out there' has found a way.....
Once again, many thanks for the suggestion and info. David
Fm: David Batten (UK) 100042,221
To: Graham L. Stoppani 100111,265
Thanks for the thought, Graham, but I already use an addressbook/diary package
(PORTEX) which I am very happy with. I use it for personal and business
addresses/phone numbers, or any number I have had to do work to find, and may
just need again 'one day'.
My Paradox database is a much larger list of companies, contacts, and what
communications there have been previously. Often the data is imported from
commercially supplied lists etc, so I need a generic 'discipline' to keep
control of who is due for a phone call (Cold-calling, most of it).
Maybe Sidekick could do a lot of this, but it is 'yet another tool' to learn,
convert data to, and try to 'bend to my will'.
#: 231624 S7/PAL - Learning ·
06-Jun-93 09:04:14
Sb: IsField(tbl,fld)???
Fm: John M. Patton 72500,2131
To: ALL
>Why doesn't PAL have an IsField(tbl,fld) function to
>test for the existance of a specific field in a table,
reminded me of a work-around with which I've never been happy.
In order to present the user with an "average sold" for each delivery day of
a possible Monday, Wednesday or Friday, I've crosstabed a range of dates
from a large historical table. The crosstab is on DOW(InvoiceDate). The
trouble is that sometimes an invoice gets written on a Tuesday or Thursday
and I need to add it into the Monday or Wednesday sum for the product in
question. I need to test for a field of "Tue" or "Thu" in the crosstab to
add it to "Mon" or "Wed."
The method I'm using now is:
IF FIELDNO(fld, tbl) <> "error" THEN
Process_Field()
ENDIF
It seems to work, yet I'm the worrying type. This doesn't seem elegant.
Historical table: Crosstab table:
Account# S* Account# S
Product# S* Product# S
InvoiceDate D* Mon A3
QuantitySold N Wed A3
DayOfWeek A3 Fri A3
(Tue A3) maybe
(Thu A3) maybe
Fm: Brian Bushay (TeamB) 76711,516
To: John M. Patton 72500,2131 (X)
>The method I'm using now is:
>IF FIELDNO(fld, tbl) <> "error" THEN
> Process_Field()
>ENDIF
>Is there a better mousetrap?
FieldNo() is a slow command so I wouldn't use this approach in a loop but
for a single command it is fine. If your going to be doing a lot of
field testing then reading the field names into a dynarrray either by
Dynarray fields.y[#]
CtrlHome Right
While Field() <> "#"
fields.y[Field()] = 1
EndWhile
or by doing a {Tools}{Info}{Structure} and then a SCAN
would be a better way to go
Fm: John M. Patton 72500,2131
To: Brian Bushay (TeamB) 76711,516
This is what I'm doing:
MENU {Ask} {Crosstab}
IF FIELDNO("Tue","Crosstab") <> "Error" THEN
[Mon] = "_mo, changeto _mo + _tu"
[Tue] = "_tu"
ENDIF
IF FIELDNO("Thu","Crosstab") <> "Error" THEN
[Wed] = "_we, changeto _we + _th"
[Thu] = "_th"
ENDIF
#: 229298 S8/PAL - USING ·
24-May-93 01:46:23
Sb: #229203-PRINT command questions.
Fm: Thomas P Knox 70410,764
To: Les Gainous 72731,146 (X)
Just to second and underscore what Brian said, it is much better to print to
a file and send the file to the printer. Some reasons why:
- better error handling.
- fewer problems printing over a network
- don't need to use OPEN / CLOSE PRINTER
- can preview report on screen first.
- can reimport the text file back into a Paradox table for
secondary processing (i.e. in page numbering to get "Page 1 of n")
- if printer jams, you can just resend the text file and not have
to re-generate the report.
Also FWIW, when using PRINT commands, use commas to separate items in the
data stream, this way Paradox will automatically convert non-alpha fields to
strings so you don't have to worry about using strval(), and you don't have
problems with string lengths > 255 when you use a plus instead of the comma.
Also, one PRINT command will continue to send a stream of data until it is
interrupted by a PAL command or control structure. You don't need a PRINT
command for every line in your script. Example:
print file fname
format("w10,ac","Date"),
format("w20,ac","Amount"), "\n",
fill("=",40), "\n\n"
scan
print file fname
format("w10",[DateField]),
format("w20.2,e$c,ar",[AmountField]), "\n"
endscan
print file fname
"\n\nEnd of Report\f"
bozo = isfile(fname) ; force file closed
At this point, you can use readme.com to view the file or copy to PRN for a
hard copy.
Fm: Les Gainous 72731,146
Thanks for the PRINT command hints and tips. I sent a msg to the forum right
before reading your msg. That msg explains the trouble I'm having printing
printer codes to the printer. I'm using PRINT FILE. The filename is "prn",
to print to the printer, or some other name, to print to an 'actual' file.
If I print the control codes directly, it works. If I put these codes in a
variable and print that variable, it doesn't work. It prints, verbatim, the
codes.
Fm: Thomas P Knox 70410,764
<<If I print the control codes directly, it works. If I put these codes in a
variable and print that variable, it doesn't work. It prints, verbatim, the
codes.>>
In putting codes in a variable you'll need to remember to double up the
"\" as you'll lose one set of 'em when you dump the variable to its output.
Fm: David Berg (Borland) 73020,374
You can say PRINT FILE "LPT1", and you can put the "LPT1" in a variable.
Fm: Thomas P Knox 70410,764
To: David Berg (Borland) 73020,374 (X)
<<You can say PRINT FILE "LPT1", and you can put the "LPT1" in a variable.>>
Yes, but why? If you are printing to a file, use a file name. The above is
just another form of PRINT going direct to the printer.
I have not yet heard one good reason, over the years, why anyone would want
to print directly to the printer, instead of to a file and then send the
file to the printer.
Fm: David Berg (Borland) 73020,374
To: Thomas P Knox 70410,764 (X)
> I have not yet heard one good reason, over the years, why anyone would want
> to print directly to the printer, instead of to a file and then send the
> file to the printer.
The main reason is if the printout takes a long time to produce and the
printer is locally attached. In that case you can save considerable time by
not waiting for the report to print twice... It can also be critically
important when trying to deal with printer alignment issues.
Other than that, I'd probably agree.
Fm: Thomas P Knox 70410,764
To: David Berg (Borland) 73020,374 (X)
Just to quibble:
<<The main reason is if the printout takes a long time to produce and the
printer is locally attached. In that case you can save considerable time by
not waiting for the report to print twice...>>
Well, you still have the problem of what to do if the printer jams, runs out
of paper, etc. You can't just restart the PRINT command at line 165. You may
may well have to "debug" the code to skip a lengthy query and/or workspace
configure for the report, to just restart it from the point where the app
starts sending output to the printer.
You really don't have to wait for it to print twice; printing to a file will
take a LOT LESS time than the printer will. So maybe it's 1.25 and not
twice as long (1 for the printer and .25 to create the file)
If lengthy printing times are an issue, printing to a file makes even more
sense. You can have a "printing" workstation check for the existence of a
file and when it's there, start grinding it out to the printer. This can be
a PC that may not be able to run the app that creates the report. Thereby
maximizing your resources.
<< It can also be critically important when trying to deal with printer
alignment issues.>>
When alignment issures are important, you typically, have a alignment "loop"
procedure that sends a few records to the printer until the alignment is OK.
This procedure would test all the "key" spots on the form for correct
alignment; something the actual report may not do until several hundred
records into it. You wouldn't use the full report to do the
alignment whether using PRINT to printer OR file.
Fm: David Berg (Borland) 73020,374
To: Thomas P Knox 70410,764 (X)
Your points are all valid, but (since you're quibbling) not always
appropriate.
Printing speed will vary, and sometimes it takes longer to produce a report
than to print it... not everyone has 486s. Also for some people it's more
important to see the first record quickly than to have good restart
capability.
You can restart your PRINT commands at line 165 if you designed your code to
support it (although it's probably easier to do using a file).
Not everyone can afford a separate computer for printing (which also implies a
network...).
I'm simply saying that you need to look at the specific situation and make the
right decisions.
Fm: Thomas P Knox 70410,764
To: Les Gainous 72731,146 (X)
I think my last message gave you some erroneous information. You had mentioned
that sending a printer command with PRINT worked but if the command was in a
variable then "PRINT variable" failed. I said you needed to double the \'s in
the variable.
In looking back over procedures I use with printer strings in a variable, I
didn't double the backslash. So:
PRINT FILE FNAME "\027"
should work the same as:
ResetVar = "\027"
PRINT FILE FNAME ResetVar
When doing reports in PAL, I typically have printer setup strings stored as
memory variables in a procedure, as:
proc LSR_ATTS() ; Printer attributes for Laser Printers
dynarray PrinterAtt[]
PrinterAtt["Reset"] = "\027E\027(10U"
PrinterAtt["Bold_off"] = "\027(s0B"
PrinterAtt["Bold_on"] = "\027(s3B"
PrinterAtt["Condensed"] = "\027(s16.66H"
PrinterAtt["Landscape"] = "\027&l1O"
PrinterAtt["Portrait"] = "\027&l0O"
PrinterAtt["Regular"] = "\027&l7.27C"
endproc
A simple procedure call then puts all your attributes in memory ready to use.
Then the following would give a heading in bold courier with the field value
in condensed print.
lsr_atts()
print file fname
PrinterAtt["Reset"],PrinterAtt["Regular"],PrinterAtt["Bold_on"],
"Field Heading\n",
fill("-",13), "\n",
PrinterAtt["Bold_off"],PrinterAtt["Condensed"],
[FieldValue]
<etc.>
#: 229356 S8/PAL - USING ·
24-May-93 11:43:27
Sb: Ptr Ctrl Codes thru PAL
Fm: Les Gainous 72731,146
To: All
I have a problem with printer control codes.
The control code for compressed printing (HPII) is \027\040\11516.66\072
This code is fine. I am printing a report through PAL printing to a file.
This file variable contains "prn" (so it'll go to the printer). I just change
the variable contents to print to an 'actual' file, if the user wishes.
If I use:
PRINT FILE filename "\027\040\11516.66\072"
the printer goes into compressed mode. This is good. BUT, if I put the
control string into a variable (e.g. Compressed = "\027\040\11516.66\072"),
then this next statement fails to change the printer.
PRINT FILE filename Compressed
The actual control string prints out, verbatim, and the printer is still in
normal (10cpi) mode.
Fm: Brian Bushay (TeamB) 76711,516
>control string into a variable (e.g. Compressed = "\027\040\11516.66\072"),
That should work just fine but if your setting the variable Compressed from
a field value then you would have a problem because the "\" character is a
special character in a string but not in a field.
so Execute "Compressed = "+[compressed Field]
Will work for you
or enter the correct string into the field to begin with by direct
assignment
[compressed field] = "\027(s16.66H"
Fm: Les Gainous 72731,146
RE: Execute "Compressed = "+[compressed Field]
I am retrieving these printer codes from a field. but the above line gives me
a script error: Syntax error: Invalid operator
Compressed = >027(s16.66H
|
|
+--> the blinking arrow
I changed the line to: EXECUTE "Compressed = [compressed field]" and
Compressed now contained the backslashes, but the backslashes are just another
character to the PRINT statement and I'm back to square one.
Fm: Brian Bushay (TeamB) 76711,516
>>RE: Execute "Compressed = "+[compressed Field]
>I am retrieving these printer codes from a field. but the above line gives me
>a script error: Syntax error: Invalid operator
Ok I left off the Quotes you need around the string value
Execute "Compressed = \""+[compressed Field] +"\""
Fm: Les Gainous 72731,146
RE: Execute "Compressed = \""+[compressed Field] +"\""
Fm: Dan Bernstein (Sysop) 75300,1726
It actually needs to be:
EXECUTE "Compressed = \"" + [Setup String] + "\""
Fm: Les Gainous 72731,146
re: EXECUTE "Compressed = \"" + [Setup String] + "\""
Dan, Thank you!
#: 229379 S8/PAL - USING ·
24-May-93 13:12:50
Sb: #229082-Pdox 4.0 TUtility
Fm: Dan Bernstein (Sysop) 75300,1726
To: Malcolm Campbell 71045,2202 (X)
1) There is no equivalent for the -ALL switch, because you need to specify a
backup name for each table. You can use the FOR command in a DOS batch file
to simulate the effect.
2) I'm not aware of any mechanism for forcing TUTILITY into a "quiet" mode.
#: 229498 S8/PAL - USING ·
24-May-93 20:19:18
Sb: REDEFINING NEWWAITSPEC
Fm: Tony Ross 75430,402
To: ALL
I have a need to build a generic table event handler. I want to associate
showpulldown and active keys in a table. So when I do a 'wait workspace' the
menus and active keys will be driven from a control table. My problem is only
in the keys section. My keys field looks like this
"F2","F3","F7",-120,-121 etc etc
I try to issue a newwaitspec like this
newaitspec key [Keys] ; hoping the keys will come thru from the field
The system reports 'expecting Pal Keycode' Even though I know the variable
has been set up correctly as I would type it in.
Fm: Brian Bushay (TeamB) 76711,516
>newaitspec key [Keys] ; hoping the keys will come thru from the field
Sorry the keys have to be listed individually or just use
Keys "ALL"
Fm: Thomas P Knox 70410,764
<<I have a need to build a generic table event handler.>>
WaitPlusPro 4.0...the only way to go!!
Fm: Dan Bernstein (Sysop) 75300,1726
You'll need to do
EXECUTE "NEWWAITSPEC KEY " + [Keys]
Fm: John B. Moore (TeamB) 71333,1775
You will probably get other suggestions, but here is one way around your
problem.
What you do is define dynarrays that contain the name of the proc that
will respond to that keystroke. you can define this dynarray element like
so..
key_bag[table+field+keycode] = "doPageUp_n"
..or something similar. All you then need in you wait proc is..
If isAssigned(key_bag[table()+field()+Strval(event_bag["KEYCODE"])])
Then Execproc key_bag[table()+field()+Strval(event_bag["KEYCODE"])]
ok_n = retval
Else ok_n = 0 ;pass on the key and do nothing special
Endif
Return ok_n
If you want to deny a keypress just create a "denyaction" proc that
returns 1 In this way you have complete flexibility in reacting to
any keypress under any circumstances..
#: 229614 S8/PAL - USING ·
25-May-93 10:43:06
Sb: #229467-Need Search&Replace Proc
Fm: Dan Bernstein (Sysop) 75300,1726
To: Mark Gurliacci 72611,2647
> Anyone know of a good search and Replace procedure for PDOX 4.0?
Depends what you're trying to do. If you're attempting to change the entire
contents of a non-memo field, a CHANGETO query will work nicely. If you're
trying to change several occurences of a string in a single memo field, you
can use Search | ChangeToEnd.
If you're trying to change multiple memo fields or scripts, or you're trying
to change a subset of an alpha field, you'll need to use PAL, most likely
combined with the SCAN command and the MATCH(), SEARCHFROM(), and SUBSTR()
functions.
#: 229625 S8/PAL - USING ·
25-May-93 12:09:06
Sb: #228867-Dialog box date input
Fm: Hank Vanderstoep 72460,314
To: Alan R Perelgut 70523,2036
Dan Berstein gave me the solution. Set the variable SDate and Edate to
BlankDate() before the dialog box starts up. In this way you can still get the
checking for invalid dates like "04/32/93" that you will not get with a string
input.
#: 229626 S8/PAL - USING ·
25-May-93 12:09:12
Sb: No F10 in Wait keylist
Fm: Hank Vanderstoep 72460,314
To: All
I have not been able to get F10 to drop out of the "Wait Workspace" command.
F1 - F9 work just fine but no F10. What is wrong with this code ?
Wait WorkSpace
Proc "EventMan.CatchTrigger"
Trigger "ALL"
Key -59,-60,-61,-62,-63,-64,-65,-66,-67,-68,27 EndWait
All the keys -59 to -67 and 27 work but not -68. Does it have another name,
other that -68 ??
Fm: Dickford Cohn 76226,1572
Hank, I don't believe -68 (<F10> or MENU) is available in a WAIT.
Fm: Hank Vanderstoep 72460,314
To: Dickford Cohn 76226,1572 (X)
Just asking the question forced me to look further in my code. A couple
of lines above the Wait statement I clear out the top line by issuing
a "ShowPulldown" and then a "EndMenu". This clears ou the 1st line but
disables the F10 key in the Wait statement.
If I remove the Showpulldown and the Endmenu, F10 drops out of the Wait
statement as expected.
Now ... how does one get rid of the "Image Undo Autorefresh DO-IT!"
off the first line WITHOUT a Showpulldown, Endmenu ???
Fm: Thomas P Knox 70410,764
To: Hank Vanderstoep 72460,314
<<Now ... how does one get rid of the "Image Undo Autorefresh DO-IT!"
off the first line WITHOUT a Showpulldown, Endmenu ???>>
You could use a 1 row high floating window
Fm: Alan Zenreich (ZS/PBE) 71171,1340
To: Hank Vanderstoep 72460,314 (X)
When a SHOWPULLDOWN is present, F10 is not trappable by a WAIT/ENDWAIT or
GETEVENT.
#: 229659 S8/PAL - USING ·
25-May-93 14:04:17
Sb: Floating windows
Fm: Ben Shulman 74017,2146
To: all
How can I get rid of floating windows without exiting a script? I have a data
entry application, and just before bringing up the main form, I create two
floating windows of one line each, in black, to cover the Paradox status lines
at top and bottom. This works fine, but when I exit back to my script menu,
those windows still exist and I can't get rid of them and they make a lot of
trouble. I've tried every possible window close command I can think of and
they won't go away. If I run debug I can manually close them, but the same
commands in the script don't work. Help!
Fm: Mark Lebowitz 70712,2660
To: Ben Shulman 74017,2146 (X)
I intend to do the EXACT same thing with my application. What I
intend to do is hold onto the window handles of the floating windows
using some sort of global variables or dynarray elements, and simply
sinking them below the echo layer when I don't want them visible. You
should be able to do this as follows: ; Create the floating windows
DYNARRAY darr_FloatingAttributes
darr_FloatingAttributes["FLOATING"] = TRUE
darr_FloatingAttributes["HASFRAME"] = FALSE
darr_FloatingAttributes["HASSHADOW"] = FALSE
darr_FloatingAttributes["HEIGHT"] = 1
WINDOW CREATE FLOATING @0,0 ATTRIBUTES darr_FloatingAttributes
TO n_Floater1
WINDOW CREATE FLOATING @24,0 ATTRIBUTES darr_FloatingAttributes
TO n_Floater2
.
. ; other script commands
.
; Now I want to sink the floating windows
darr_FloatingAttributes["FLOATING"] = FALSE
WINDOW SETATTRIBUTES n_Floater1 FROM darr_FloatingAttributes
WINDOW SETATTRIBUTES n_Floater2 FROM darr_FloatingAttributes
Fm: Thomas P Knox 70410,764
To: Mark Lebowitz 70712,2660
I think it would be better to just move the window off the screen than
change the floating attribute. You could encounter unwanted problems
with the Z-order by doing what you propose.
Fm: Ben Shulman 74017,2146
To: Mark Lebowitz 70712,2660
I will try that. I believe I did, and, no matter what I do, they won't go
away. When I try to select the window or set its attributes, using the
handle saved originally, Paradox tells me I have an invalid window
handle, even though the value in the handle variable exists and matches
the handle value of the window!
Fm: Dan Bernstein (Sysop) 75300,1726
To: Ben Shulman 74017,2146 (X)
There are two basic methods for handling this:
1) Keep a pair of variables (WinFloat1 and WinFloat2) available; when
you want to close them, use WINDOW SELECT and WINDOW CLOSE.
2) Use WINDOW LIST to locate all windows on the desktop, then use WINDOW
GETATTRIBUTES to find out which ones are floating.
Fm: Ben Shulman 74017,2146
To: Dan Bernstein (Sysop) 75300,1726 (X)
Thanks, I'll try it. As I replied to the previous message, so far, I
don't seem to be able to select or close or do anything with these
windows once they're created, even though I have the window handle.
Fm: Thomas P Knox 70410,764
To: Ben Shulman 74017,2146 (X)
If when you WINDOW SELECT the floating window and do a WINDOW CLOSE, the
window should disappear. You can also move the window off the workspace
without selecting it.
Read page 182-83 in the PAL Programmer's Guide for some things to
remember when working with floating windows.
Fm: Ben Shulman 74017,2146
To: Thomas P Knox 70410,764 (X)
Thanks. I'm using the techniques described on pages 182-183, which work
fine to enable me to access various other windows after creating the
two floating windows. The problem is that, with a valid window handle,
using window select and window close, they do not close, but remain on
the workspace, preventing further code from working properly. I will try
everyone's suggestions, and post the code if there is still a problem.
Thanks again.
#: 229732 S8/PAL - USING ·
25-May-93 20:54:46
Sb: #229685-Text display
Fm: Steve Erbach (NEWPALS) 70620,3432
To: DOUG KANTER 70724,2343 (X)
The Dan Utilities (DANUTL.EXE in Lib 7 or 8, I believe, by Dan Paolini) and
Virginia Sauer's TOOLBX.EXE (again Lib 7 or 8) contain some generic message
display routines that respond to a keypress. They don't use the TEXT ENDTEXT
structures, though.
Fm: DOUG KANTER 70724,2343
After all I've tried, I don't care if they use a bran muffin recipe,
Steve. I just want my help screens to work! Thanks for the tips.
Fm: Thomas P Knox 70410,764
I'm E-Mailing you my favorite utility message proc to display text and
have the user respond. Script header has example and description.
#: 229860 S8/PAL - USING ·
26-May-93 11:26:34
Sb: PAL run
Fm: chris pengelly 100063,2427
To: Dev Vamathevan 71333,2241
i have a pdox 4.0 script that runs a batch file via RUN or RUN BIG. the
section of code loops, so the batch file may run many times. after about 20
iterations, there is no conventional memory left in the dos command shell.
the batch file creates a subdirectory, uses SUBST to allocate a drive letter
to the subdir, unzips some files to the virtual drive and makes a list of the
files that is left for importing into a pdox table. another run command later
in the loop releases the subst virtual drive.
conventional memory drops from 317K during the first time to less than 90K or
so before zip is to big to fit in memory. presumably the batch file ending
closes the command.com shell, so why is there an accumulation of used memory?
Fm: Dan Bernstein (Sysop) 75300,1726
First of all, it's not a good idea to address a message to a specific
Borland engineer -- I'm usually the only one reading this section, and
I primarily look for messages directed to "All" or "Sysop".
In your script, you're using SUBST, which is a TSR. This is probably the
primary source of your difficulties, and I'm actually surprised that you
aren't experiencing more problems. I'd suggest reconstructing your code
to avoid the use of SUBST.
#: 229876 S8/PAL - USING ·
26-May-93 12:48:57
Sb: AUTOLIB
Fm: Stace Tate 71075,3127
To: Dan Paolini 75300,1734 (X)
We run a manufacturing plant using a PAL application (4.0 runtime compatible
mode) to collect process and process control data. This application has 59
scripts ranging in size from 5K to 115K (1.7 MB Total) writing to 26 libraries
of about 1 meg total. The autolib statement contains 25 of these libraries.
My question is wheather it would be faster to write more scripts to fewer
larger libraries or stay with what we have? In other works can Paradox find
the required procedure faster in 2 libs totaling 1 meg or 10 libs totaling 1
meg?
Fm: Harry Goldman (TeamB) 75300,1733
I would suggest that you create one or two LIB's instead of 25. The way PDOX
works, it will search down the AUTOLIB 'path' to find a procedure. If the
PROC is found it will mark the spot (so to speak) so that future calls don't
require the same search.
If you have 25 LIB files, there will be a certain amount of overhead
involved in opening and closing each one. Use one or two LIB's and that
overhead is greatly reduced.
Fm: Stace Tate 71075,3127
Thanks Harry, That confirms what I suspected. I'll give it a try next
opportunity I have to change all the writelib's.
As a interim step I setup the starting script to set autolib to only the
necessary libs then add to the autolib as required.
#: 230030 S8/PAL - USING ·
27-May-93 09:58:11
Sb: Pdox3.5 PAL SCAN
Fm: Kimara Sajn 73340,1150
To: All
Has anyone ever incountered a "skipping" type problem using SCAN in a proc.
Here's the situation, SCANing a table for records that are a certain date and
have specific fields filled in, but it appears to skip some records that meet
the test. When I go back in to post again, it picks them up.
Fm: Brian Bushay (TeamB) 76711,516
> Has anyone ever incountered a "skipping" type problem using SCAN in a proc.
>Here's the situation, SCANing a table for records that are a certain date and
Scan will skip records if your changing the key field values. Because this
will cause some records to move
And if you delete records because the record below it will move into the
deleted records position.
Fm: Dan Bernstein (Sysop) 75300,1726
There are two likely causes for your problem:
1) In a SCAN...ENDSCAN, you must always have the record/table cursor at the
exact same point at the start and end of the loop. In other words, commands
such as UP, SKIP, and DEL are a bad idea. If you MOVETO a different table,
you must always MOVETO back to the original table before the ENDSCAN.
2) Your SCAN FOR or IF condition isn't working properly. You might want to
try using the debugger and stepping through the code to see which records it
stops at, the using the PAL menu (Alt-F10 | Value, mostly) to figure out why
it doesn't stop at certain records.
Fm: Kimara Sajn 73340,1150
Ok thanks, I thought that might be what was happening (i.e. the deleted
records changing the marker). Is there any way around that? Here's the
situation:
I have two tables, info from table A is pumped into table B (along with
other user provided info) if it meets the criteria of date today or less. It
also gets checked to see that valid info has been entered. What I am trying
to do (with little success :) ) is delete out the info that gets pumped to
table B, but leave the others in table A. I was attempting to do this by
using the SCAN command, but get the "skip" phenom.
Any ideas you have would be great. Thanks Again.
Fm: Dan Bernstein (Sysop) 75300,1726
Here's the basic algorithm for a SCAN equivalent:
WHILE NOT EOT()
IF RecordShouldBeDeleted() THEN
DEL
ELSE
SKIP
ENDWHILE
#: 230158 S8/PAL - USING ·
27-May-93 23:49:41
Sb: Time calculations
Fm: FAZUR ESTRADA 72470,1615
To: All
I am designing a production database. I have two fields for start up and stop
times (Start, Stop). the data entry clerk will enter military time as follows:
Start Stop Tot hrs
7:00 15:00 8.0
I need to perform a calculation Stop-Start= Tot hrs. How do we perform
calculations with this time format?, thanks for your help.
Fm: Dan Bernstein (Sysop) 75300,1726
Basically, you need to convert the string to a number. The approach I
tend to use converts 13:30 to 13.5, by dividing the minutes by 60.
Fm: JOHN R NELSON 70641,3562
I am E-mailing you my own procedure. It is called Timecalc.sc. It includes a
demo and you will see that you do not have to convert the time to a number.
However, it does require the start and stop dates so that going past midnight
may be accounted for.
Fm: JOHN R NELSON 70641,3562
I am E-mailing you my own procedure. It is called Timecalc.sc. It includes a
demo and you will see that you do not have to convert the time to a number.
However, it does require the start and stop dates so that going past midnight
may be accounted for.
#: 230182 S8/PAL - USING ·
28-May-93 01:59:34
Sb: Concurrent Processing?
Fm: Gary M. Mugford 70274,2254
To: all
As described elsewhere, I fought the nightmarish demon of possible database
corruption of a 432K record, 230+meg database by finding some coding errors on
my part and a partially connected power supply that was slowing down the
server.
Still, I have a desire to at least verify the database. Multi-processors
have been in the news lately and got me thinking if there was an applicability
to this problem.
An idea-- If I carved the database into smaller parts with a
Continue_Changes_Query using number ranges on the single-field primary index,
I could run the query simultaneously on about ten machines. The resulting
answers would then by run through TUtility (exiting off the network and
rebooting into non-network mode to exact as large a speed as possible from
TUtility). The presumption is that if ALL the answers passed the test, the
database would post ipso facto be verified. If one of the sessions revealed
corruption, TUtility would handle it. Then, I would just delete the original
(forms and reports are save umpteen places) and then combine the segments back
together again. Voila, verified and packed.
BUT ... it occured to me that any corruption would do in the offending
query. Could verify me as simple as doing the query? If it succeeds, is
TUtility necessary? Is this chop and test a good idea? And how come I have to
exit Paradox to run TUtility to avoid the NOT ENOUGH MEMORY errors run big
seems to result in?
Fm: Thomas P Knox 70410,764
I think the idea of splitting the database into smaller parts is a logical
one. We did something similar in the past, but it was for parsing large
amounts of text, and not identifying corruption.
I would guess that if the table is corrupted, the queries may work
successfully, and you couldn't assume that if the queries completed ok, that
the table was ok.
If you have the 10 PC's available, go for it!
Fm: Gary M. Mugford 70274,2254
Based on feedback here, I'm going to go ahead with my divide and conquer
project. It won't happen this week, but I will keep everybody posted. I will
be doing rebuilds as it is the consensus that it's possible to successfully
query with corruption. At least I get a packed database out of it.
Fm: Harry Goldman (TeamB) 75300,1733
There are several concerns that you will need to be aware of, and they all
deal with data integrity. On the whole your idea doesn't sound too bad, and
you may get the desired result. BUT:
(1) Know ahead of time the exact number of records each query should get,
and verify that those records do in fact arrive in the answer table.
(2) Sometimes table corruption will cause the number of records in your
table to not be in sinc with the record X of Y indicator. If the total
number of records that you get is greater then the number in the original
table (barring duplicate queries) you are still OK. Its if you loose records
that you have a problem.
(3) KEY the ANSWER tables BEFORE they are rebuilt.
(4) After the rebuild, RESTRUCTURE the ANSWER tables to ensure that they are
packed as tightly as possible.
(5) When you are adding the tables back together, do them in sequence. Start
by renaming the lowest ANSWER table to the new table's name. Then add the
next lowest to it, then the next after that, etc. By doing so you will
ensure that the table will stay as small as possible, and have as few split
blocks as possible.
(6) Check you table size when you are done, how does it compare to the
original ? Estimate the overall size, how does it match to that ?
If you do this carefully you should be fine.
Fm: Dan Bernstein (Sysop) 75300,1726
If you're really serious about allocating a bunch of hardware to handle your
data integrity problems, my instinct would be to also start investigating a
move to an SQL-based server. Minicomputers usually have more in the way of
fault-tolerant hardware, and SQL servers tend to have more-advanced data
recovery mechanisms.
Your basic idea about splitting the table is a good one, I think, though
there'll probably be some refinements to be made to speed it up. (No ideas
off-hand, though)
Fm: Gary M. Mugford 70274,2254
This project is headed to InterBase sometime this calendar year. But I got
to nurse it there in a paradox dos world. Going to give the project a try
sometime between now and the end of the month. I'll let you know how it went.
#: 230286 S8/PAL - USING ·
28-May-93 17:41:06
Sb: Linked MultiTable Forms
Fm: george reis 70724,1324
To: All
I am hoping for criticisms, suggestions, and any other kind of help for a data
entry system I am developing. The system is comprised of a number of
multi-table forms that are linked together via shadow tables to create a
multi-form form. My approach is as follows.
Suppose that I am in a detail table of a form (call it the parent form) and I
want to move to a detail table in a linked form (call it the child form.)
Here's what I do. For brevity I'll skip Arrive and Depart Triggers, etc.
1) Save key values pertinent to the Child Form.
2) PostRecord ; to permit leaving the Parent detail table
3) Moveto "ParentFormMastertable"
4) PostRecord ; to permit leaving the Parent Master table
5) Window Select ShadowTableWindow
6) Enter key values into the shadow table
7) Do_It! CoEditKey ; to toggle to the MultiTable Child Form
; whose master table is the ShadowTable
8) PickForm ChildForm
9) Moveto "ChildFormDetailTable"
This process takes about 10 seconds on a 386/25 4Meg system when the tables
are almost empty. I would sure like to cut that to 5 seconds at most.
Am I doing useless steps? Is there a better approach?
Perhaps an outline of the data structure would be helpful. The top level has
4 M-M relationships with second level tables. One of these second level
tables relates M-M with a table that relates 1-M with 4 tables.
Fm: Brian Bushay (TeamB) 76711,516
> 6) Enter key values into the shadow table
;at this point you start going astray
>7) Do_It! CoEditKey ; to toggle to the MultiTable Child Form
> ; whose master table is the ShadowTable
> 8) PickForm ChildForm
> 9) Moveto "ChildFormDetailTable"
First when you start the Application put all the tables you need on the
Workspace and choose the correct form for each.
You probably want to move the Table windows you don't want to see off of the
visible portion of the screen
When you want to move to another form Unlock the record you on and move
directly to the Form Window you want with Window Select
Enter the values into that Shadow Table and use RESYNCKEY to bring up the
correct detail. No need to use Do_it!
Now move to the child table.
Fm: george reis 70724,1324
Thanks for the clarification. Using RESYNCKEY has moved my average display
time from 10sec down to 7sec. I appreciate your help.
Maybe you can do the same thing for the rest of my loading procedure. I don't
use Window Select, because the window handle may be no longer valid. Here's my
understanding of the situation.
According to Salcedo and Rudy's book, there is a limit of 24 images allowed on
the workspace. Testing my app at various places, I find the number of images
varies from 3 (while in a small subform) to 15 (while in the master form.)
Since nimages() varies as I move around the app, I conclude that images are
being destroyed. I have verified this in a few cases by creating all windows
at the beginning of the app, and then noting that they need to be recreated
when I need them. (Also, the number of registered files varies from 18 to 42,
whatever that means.)
In any event, I am using Henrik Bechmann's EventMan, and his idea of a
SetFocus routine rather than a WindowSelect. In order to SetFocus I do the
following steps:
1) See if the WindowName that I want to select is registered with
EventMan and if so, does the handle correspond to an existing
window.
2) If the answer to 1) is yes, then I can Window Select. If not,
then I have to recreate the window. Then I remove the illegal
handle from the WindowObjectTag dynarray, and insert the new
handle. Next I update the ObjectTagWindow dynarray with the new
handle.
3) If the window I want to select contains a lookup table, then the
process is even more tedious because, chances are that the window
containing the base table for the lookup is also gone (maybe this
always true?). So my SetFocus routine for the lookup table may
contain a SetFocus routine for the underlying table.
If you see any way to simplify this process, I will sure appreciate hearing
about it.
There will still remain the slowness while in the table. It seems that Pdox
is not loading the "right" things eg. Press down--wait 2or3 seconds for
"down" (and possible related triggers?) to load. The next down is fast
enough. Now press "Up" and wait all over again. Is there some way to make
sure that Pdox loads the "right" stuff as I move from window to window?
BTW, I don't think the lack of speed is due to lack of memory. When I load
Pdox, memleft is 2Meg. If I set tablek at 200, memleft never falls below
1.3Meg as I wander around the app. If I accept Pdox's default assignment of
800 for tablek, memleft is reduced to around 800K, but it never falls below
750K. (Of course, I can't shell to Pal-Edit--no memory left.)
Fm: Brian Bushay (TeamB) 76711,516
Images are only destroyed if you have multiple images of the same table on
the workspace when you go in to CoEdit. Nimages() will report different
number depending on whether your in a multi table form or not.
In a mulit table form all embeded tables will be counted as images. Any
table windows that are also embeded tables on the multi table form will be
hidden (and not accessible by Window Select) when your in the multi table
form.
Any time you have a form Window it will be destroyed if you move to a multi
table form that uses that table as an embeded table.
For generic application generators like EventMan you need to worry about
windows getting destroyed or hidden. However if your not trying to design a
generic application you should be able to use Window Select for maximum
speed.
Your application seems to have enough memory from the numbers you put up.
It is normal for there to be a slight lag the first time a procedure is
read. After that you shouldn't be able to notice.
If your using Closed procedures (and you shouldn't be) then they will cause
a reread of procedures they contain.
Fm: george reis 70724,1324
I was not having slight lags, so I knew something was wrong. I am
embarrased at what I discovered. The lib containing most of the procs
for the linked multitable forms was fifth in line in my autolib
statement, after about 200K of other stuff. Moving it to first place
reduced my delays by two-thirds (ie. it now takes 1/3 the time.) I now
have "slight lags" and acceptable performance. Thanks for your help.
#: 230375 S8/PAL - USING ·
29-May-93 13:53:06
Sb: #230372-Finding Duplicate REC.
Fm: Brian Bushay (TeamB) 76711,516
To: B.C. 72570,2072 (X)
>I have a DB which consist of name,SSN,and birthdate fields. I want to
>create a script that will locate all duplicate names. Unfortunately the first
>and last name are in the same field. Is their any way to do this?
If I understand your question correctly you would like to get all records
where the value in the [Name] field occurs in another record.
If so use a query like this
yourTbl | Name | SSN | Birth Date |
| Check _n | Check | Check |
| _n Count All > 1 | | |
Brian
Note if there are a lot of duplicates for the same name then this query may
run out of space. Essentially it must process the Square of the number of
duplicates for anyone name. so if You have 2 John Jones in your database 4
records are processed by the query. If you have 3 it goes up to 9 ect.
If your in this situation you can do it as two separate Queries.
Query 1
yourTbl | Name | SSN | Birth Date |
| Check , Count All as Number of | | |
Query two use the Answer table
to query back to the original table for any name that has a count >1
Fm: Wayne Schulz 75410,2434
What about restructuring the table with the SS# as key, and then letting
all the duplicates pop out automatically? -- assuming the SS# has been
assigned to every field...
#: 230376 S8/PAL - USING ·
29-May-93 14:22:17
Sb: Another way?
Fm: David Chiaramonte 71052,1616
To: sysop (X)
I created a script to keep track of daily shipping and inventory totals. The
two tables are:
ONHAND (Item and total in stock)
and
Shipping (Item and qty being taken out of stock.)
Right now, the script does a query on shipping by selectiing the item and CALC
SUM on the qty. This gives me an answer table with the grand total for each
item.
I then run another query using example elements to link the item in the answer
table to the item in ONHAND and use examples for the QTY in both tables. It
just subtracts the two qty elements from each other. I then add the new
results to the on hand table.
This method works fine, however it is a bit slow.
Is there a better way?
Table structure:
SHIPPING =
Location name (A20)
ITEM (A20)
QTY (N)
ONHAND =
ITEM (A20)
QTY (N)
Fm: Brian Bushay (TeamB) 76711,516
>I then run another query using example elements to link the item in the
answer >table to the item in ONHAND and use examples for the QTY in
both tables. It >just subtracts the two qty elements from each other.
I then add the new >results to the on hand table.
You should be able to do a Changeto Query instead of the Query, ADD
process. That will save you a little time
#: 230390 S8/PAL - USING ·
29-May-93 18:49:46
Sb: Send Report to variable
Fm: Phillip Coomer 70410,335
To: All
i Am trying to run a report to a file ......... The file name is
entered by the user and assigned a variable FN I am haveing trouble getting
Paradox 4.01 to send the report to the file name. HELP
Fm: Thomas P Knox 70410,764
Use the select command:
TableName = "YourTbl"
ReportNum = 1
ReportFileName = "Report.txt"
Menu {report} {output}
select TableName
select ReportNum
{file}
select ReportFileName
You can use the SELECT command to enter a variable value for any Paradox
prompt requiring a user's input. This will enter the value and continue.
Fm: Harry Goldman (TeamB) 75300,1733
There may be several problems here, its tough to say. The most common
'gotcha' is that if the file already exists you will be prompted for
{Cancel} {Replace}. Try this:
{Report} {Output} Select Tablename.a Select RptNum.n {File}
If MenuChoice() = "Cancel" Then
{Replace}
Endif
#: 230474 S8/PAL - USING ·
30-May-93 23:34:27
Sb: CSUM() not Equal ?!?!?!
Fm: Bill Darron 70650,2212
To: all
I am dumbfounded. I have an application where I let users typein the
value of a check they are writing (write_a_check_for) and then they
can split the dollars amongst any number of categories. The users
scroll around inside an answer table, typing in the "split dollars"
until they are finished. I have movement under control from an event
driven wait proc.
When the users press [F2], then we do a quick check to make sure
the "split dollars" equal the whole. Sometimes this works great,
other times it bombs. The total dollar amount I am looking for is
8944.70, and the pieces are in an answer table that looks like this:
; Structure of "C:\\PDOX40\\ANSWER"
; "Leger #" : "A6",
; "Leger Category" : "A40",
; "Split Dollars" : "$"
and the split dollars looks like this:
Leger # Leger Category Split Dollars
------- ---------------------------------------- ----------------
1900 FIT 3,440.59
1910 SSMD - EE 1,792.57
1915 SSMD - ER 1,792.57
1940 SUI - EE 0.00
1942 SUI - ER 599.03
1943 SDI - EE 204.22
1945 SIT 1,043.30
1950 FUTA 72.42
The dollars DO equal 8944.70, but the code below doesn't
(it is part of my wait proc):
IF CSUM("answer","split dollars" ) <> write_a_check_for
THEN
BEEP
SLEEP 100
BEEP
MESSAGE "The total of the Split does not Equal the Amount of this "+
"check. Please correct your math, and press [F2] again when finished."
SLEEP 2000
RETURN 1
ELSE
RETURN 2
ENDIF
Fm: Dickford Cohn 76226,1572
You are working far too hard on this, IMO. There is a script in the
LIBS here called tomony.sc or some such which relieves this pain
substantially...I've done a fair rewrite of it to suit my paricular
circumstances...no error checking at this level is required...the
dolllar amounts are made to agree beforehand...THEN you run the
conversion to 'words'...much easier, IMO. If you need further
assistance, just holler, ok?
Fm: Bill Darron 70650,2212
Thank you for your help, but I believe you misunderstood my problem. The fact
is that I AM using the TOMONEY script to convert the TOTAL AMOUNT of the check
to words. The problem comes later when I have written the check, and then I
want to divide the total amount amongst several different ledger accounts. I
see I have a few replys, so I will read on. Read them too and see if you have
anything to add.
Fm: Dickford Cohn 76226,1572
Yeah Bill, I missed your point by a country mile...been planning to upgrade
the RAM between my ears for some time now...maybe then I can hold more than
one thought in memory at a time then...whaddaya think?<g>.
I think the other answers you got were the *right* ones...sorry for butting
in. Have a good holiday.
Fm: Don Schubert (TeamB) 70007,4654
Sounds like binary rounding error from here...
Fm: Brian Bushay (TeamB) 76711,516
Because Paradox stores numbers internally in Binary there are problems in
comparing decimal fractions that were computed from addition to numbers that
were entered directly.
The problem is that not all decimal fractions can be exactly represented in
binary.
The situation is analogous to adding 1/3. If you represent 1/3 as a decimal
fraction you use
.333333333333333333333333333333333333333333333333333333333333
But 3 of these do not = 1
So use
IF Round(CSUM("answer","split dollars"),2) <> Round(write_a_check_for,2)
Fm: Bill Darron 70650,2212
Once again you come through! Thanks alot! Do you know when Borland is going
to work out this rounding thing? I have had several problems with ROUND(). I
didn't know that CSUM() and IMAGECSUM() were affected.
Quattro users have problems too. Trying to match Quattro rounding and Paradox
rounding causes conflict.
My wish list is for the "$" formatted fields always to round correctly, or
stick to 2 decimals. Otherwise, use "N" format.
Fm: Dickford Cohn 76226,1572
Bill, many programs suffer from that same problem...it has to do with
conversion of numbers stored in binary format to decimal equivalent. I dunno
why software purveyors have *not* addressed the problem...it is quite
pervasive.
Fm: Steve Erbach (NEWPALS) 70620,3432
>> conversion of numbers stored in binary format to decimal equivalent. I
dunno why software purveyors have *not* addressed the problem...it is quite
pervasive. <<
Hmmm. I suppose if the chips were converted to decimal instead of binary
logic we could get rid of the problem. This does not seem like a problem that
_can_ go away.
Fm: Dickford Cohn 76226,1572
Now you've gone and done it!!! You were sworn to secrecy!!! I've almost
completed work on that chip, too...it's gonna be called the DECIUM (kinda
original, no?). No heat problems either...it uses only *one* transistor (no
sense complicating things). If I could just get the size and weight down, I'd
have it made. Right now, it's about 180# and sports a Casio calculator
built-in...looks almost like a human on 'ludes! Fast??? You betcha!
Gotta go now...just because of you, I gotta write up a press release.
Fm: Don Schubert (TeamB) 70007,4654
I doubt Borland or any other software company will "work out this
rounding thing". Accounting programs do it, but they have a fixed task.
DBMS programs will not because you need the flexibility to code for
every case, not just rounding to the third decimal.
Spreadsheets, however, could provide a financial rounding switch that
would stay with the worksheet.
Fm: Brian Bushay (TeamB) 76711,516
>Do you know when Borland is going to work out this rounding thing?
I don't really expect there to be a change. You will have to handle the
Round() yourself
>My wish list is for the "$" formatted fields always to round correctly, or
>stick to 2 decimals. Otherwise, use "N" format.
That would be ok with me but I suspect it would break a few applications.
Fm: Dan Bernstein (Sysop) 75300,1726
Looks like you've gotten your answers for the most part. If you (or
anyone else) wants more info on the subject, you might want to download
TechInfo Sheet #1148 from Library 12.
#: 230638 S8/PAL - USING ·
01-Jun-93 03:04:30
Sb: #230616-Importing files
Fm: Thomas P Knox 70410,764
To: FAZUR ESTRADA 72470,1615
I failed to mention that whenever you are converting date fields you need
to validate the data. There are a few ways to do this. In your case you
mentioned that the nonvalid values you get are "000000". The following
modification will correct that situation.
In this particular case you can eliminate the use of the intermediate variables
of GoodDate and BadDate and work directly with the fields themselves.
If you are using Paradox 4.0 you can use:
Scan
[GoodDOH] = iif(numval([BadDOH]) = 0, blankdate(),
dateval(substr([BadDOH]),3,2) + "/" +
substr([BadDOH]),5,2) + "/" +
substr([BadDOH]),1,2))
endscan
If you are using Paradox 3.5 use:
Scan
if numval([BadDOH]) = 0 then
[GoodDOH] = blankdate()
loop
endif
[GoodDOH] = dateval(substr([BadDOH]),3,2) + "/" +
substr([BadDOH]),5,2) + "/" +
substr([BadDOH]),1,2))
endscan
The above example only tests for a nonvalid value of "00000". In other
situations, you may get non "000000" values that do not convert to valid dates.
A better (and more generic) approach would be to convert the value and test
the result.
scan
GoodDate = dateval(substr([BadDOH]),3,2) + "/" +
substr([BadDOH]),5,2) + "/" +
substr([BadDOH]),1,2))
if GoodDate = "Error" then ; returned by dateval() if not a valid date
[GoodDOH] = blankdate() ; assign a blankdate() or other default date
else
[GoodDOH] = GoodDate ; date is valid
endif
endscan
Fm: Brian Bushay (TeamB) 76711,516
>What else I need to do, to assure that all records are processed?, I checked
>the data on the field, and all records are consisten in their format,
If the records aren't processing then they are not consistent with the
pattern in the Match() function. The only other possibility is that you are
modifying key fields and the records are moving
Fm: Brian Bushay (TeamB) 76711,516
>Scan
> BadDate= [BadDOH]
> GoodDate = dateval (substr(BadDate,3,2) + "/" +
> substr(BadDate,5,2) + "/" +
> substr(BadDate,1,2)
If GoodDate <> "Error" Then
[GoodDOH]= GoodDate
Else
;what do you want to do if conversion fails?
Endif
>EndScan
>Do_It!
Fm: Thomas P Knox 70410,764
<< Scan for Match ([Emp Name], "..,.. ..",last,first,middle) >>
It may be a typo in your message, but you need a space after the comma in
the match function: Match([Emp Name],".., .. ..",last,first,middle)
^
What you are doing is breaking up the [Emp Name] field into three chunks.
The first one is for any text before the comma, the second is for any text
after the first space and before the second space in the field. The third
chunk is for any text after the second space. Each chunk of text is then
assigned to a variable in the order they are listed. The nature of the MATCH()
function is to return TRUE if all three variables were assigned or FALSE if
all three weren't assigned. Two out of three is FALSE.
Since you are SCAN'ing for a condition, the scan will only evaluate those
records that the condition is TRUE. So, some entries in the [Emp Name]
field, while they appear at first glance to be the same, are in fact not the
same. Hence the MATCH() function returns FALSE and the record is "skipped".
A better approach would be to SCAN all records and test the match with an IF
statement inside the loop:
TotalRecs = nrecords("answer")
Scan
Message "Working on rec.# ", RECNO(), " of ", TotalRecs
if Match ([Emp Name], ".., .. ..",last,first,middle) then
[Fname] = first
[Lname] = last
[Initial] = middle
else
<alternate processing here>
; perhaps put a debug here, so when the scan encounters a nonvalid
; entry, you can see what is not right with the value in [Emp Name]
endif
EndScan
Also, notice that I removed the NRECORDS() function from the scan loop. It
is more efficient to assign the value to variable befor entering a loop,
otherwise, you force Paradox to count the records in the answer table in
every pass through the loop.
Take a closer look at the values in [Emp Name]. I think you will find some
"ringers" in there.
#: 230696 S8/PAL - USING ·
01-Jun-93 16:12:02
Sb: Import 'Too many Fields'
Fm: Frank Becker 100015,2747
To: All
I Need to import data into paradox tables prior to normalising but the file
in question has too many fields. 555 to be exact. Each record in the file
(Comma Delimited with quotes) is identified by a unique File Number. I need to
break the file up into parhaps 3 differant tables before converting it into
usefull/useable data. I have thought about File reading into a memo and then
doing some kind of word search/Count/ Delimiter Count but whilst experimenting
Even the simple code:-
Editor Find "\"" Editor Findnext with a count seems incredibly slow. !!
Could any kind soul help with a routine to solve this major stumbling block.
Fm: Dan Bernstein (Sysop) 75300,1726
You've got the right idea, but using the editor is too slow. Try using
SEARCHFROM() and SUBSTR() instead. Note also that MESSAGE is slow, too; I
recommend using MOD() to trigger MESSAGE every 10th or 25th time through the
loop.
Fm: Harry Goldman (TeamB) 75300,1733
Download PARSER.ZIP from the library here. It will create a 3.5 table for
you, and will allow you to view and import the data.
#: 230735 S8/PAL - USING ·
01-Jun-93 18:23:45
Sb: Table reference
Fm: Rand L Monroe 71652,1652
To: Brian Bushay/ 76711,516
Is there a way to make the table name in a field specifier reference a
variable. Such that table name in: [table -> field] could be a variable
that can be set to any table name that is desired.
Fm: Brian Bushay (TeamB) 76711,516
No but MOVETO "Tablename" [field] should be able to give you most of
what you want.
#: 230762 S8/PAL - USING ·
01-Jun-93 20:58:57
Sb: Group Lock w/ No Detail?
Fm: David I Becker 70302,635
To: All
I encountered a situation which seems strange to me. When attempting to
replace the key in a record, which is the master in a master/detail form, I
got a "Group Lock on Detail". Another user had a lock on a record in the
detail table, but that detail record was NOT linked to the master I was
co-editing. Further exploration showed that if the master has NO associated
records in the detail table, it is subject to the group lock when ANY record
in the detail is locked. If the master DOES have one or more associated
detail records, then locking detail records associated with OTHER masters does
not affect it - as I would expect. Why should a master record with NO
ASSOCIATED DETAILS be locked because some UNRELATED DETAIL record is locked?
What's the deal here? Is this WAD or bug?
Fm: Brian Bushay (TeamB) 76711,516
You get a Group lock when you change the key of an existing record.
A Group Lock will prevent other users from being able to modify any of
the detail records that belong to that master record.
Fm: David I Becker 70302,635
I just became aware of 4.02 a couple of days ago and haven't gotten hold
of Borland Customer Service yet. I found the problem to exist with zero
traffic (at least zero Paradox traffic) and it was easily duplicated
with any two users in interactive mode. It feels to me like something
that is consistent and not really a "bug" per se, but more in the nature
of a design error. DB
Fm: David I Becker 70302,635
To: Brian Bushay (TeamB) 76711,516
I understand that and the need for it. My concern is with the reverse
situation. A lock on a detail record locks the key of the master. That
is still no problem. But I also find that if the master has no
existing detail records, then a lock on ANY record in the detail table
locks the key of the master record that has no details. This makes no
sense to me. DB
Fm: David I Becker 70302,635
To: DAVID R FAULKNER 76116,3513 (X)
I only tested it in the environment where I discovered it, at a client
site. I don't know how I could go about testing multiuser locking not a
network. Is that possible? I will retest it tommorrow on another
network, but I am quite confident the problem is duplicatable. Anyway,
I had no difficulty duplicating the event at the time. I tried it with
two different master/detail forms, on two different master/detail pairs
of tables. It occurs every time, as described: User A is on a master
record that has no associated details, User B locks a detail of ANY
OTHER master record. When A attempts to modify the key of his record -
boom - "Group Lock on Detail by UserB". I got around my problem because
I didn't really need to change the key, I was just trying to use
copyfromarray to restore the original data. I recoded to restoring the
data field by field and avoided the problem by not messing with the key.
Of course the program is now slower and UGLY. I hope someone can at
least explain the reason for this problem, so I can get on with my life.
Fm: DAVID R FAULKNER 76116,3513
To: David I Becker 70302,635
Great, I'm not losing my mind. I followed you instructions and sure
enough I got the bogus group lock message. THIS IS A FULL FLEDGED BUG
in my book! The work around that we had to teach our client was that if
it happens, just insert a bogus detail before changing the masters key.
I have not tried this in 4.02 yet. DrF
Fm: David I Becker 70302,635
To: Dan Bernstein (Sysop) 75300,1726
Correct - but not in table view - we are talking about master/detail
related tables created through forms.
#: 231098 S8/PAL - USING ·
03-Jun-93 09:11:23
Sb: PDOX Runtime & Source
Fm: Lawrence Sobilo 72730,1735
To: ALL
With PDOX Runtime, do I need to distribute both the .SC and .SC2 files, or can
I just distribute the .SC2 files?
Fm: Dan Bernstein (Sysop) 75300,1726
You can distribute just the .SC files, but you can never distribute just
the .SC2 files. If you wish to avoid distributing source code, you'll
need to use libraries.
Fm: Richard Haven (Borland) 72170,3364
You can also encrypt your scripts, which also encrypts the SC2.
You can send out the SC2 files if you want, but they will be recreated
if the SC file is newer. If the system will be installed on Read Only
media, you _must_ send the SC2 files (and make sure they are current so
Paradox doesn't _try_ to make new SC2's) or the system will be very slow.
#: 231102 S8/PAL - USING ·
03-Jun-93 09:36:30
Sb: pdoxruntime
Fm: Prudential 72410,1343
To: all
When using runtime w/Windows, it takes 55 seconds for a small application to
load (4k) w/the both the app & database residing on a network drive while
PDOXRUN is located on the workstation. When running the same from DOS, it
takes 7 seconds to load. Our users insist on running from Windows and we need
to tweak (thru a PIF file) PDOXRUN to operate as fast as possible when
loading. The users have Dell 386/25SX machines w/4Meg of memory and DCA token
ring cards. Any help will be deeply appreciated.
Fm: Dan Bernstein (Sysop) 75300,1726
First of all, make sure that the private directory is on the local drive.
Next, we recommend that you give Paradox at least 4MB of RAM, so you'll need
to upgrade those machines to 6 or 8MB, and change the .PIF file command-line
to -EXTK 4096.
For more information on running Paradox on a network, check out Section 10.
Fm: Dickford Cohn 76226,1572
I presume you're talking about Runtime ver 4.xx here...in that instance,
you're probably pushing the limits of your 4Mb RAM. In order to run PDOX4.xx
under Windoze, it is advisable to have at least 6Mb of RAM. One of the
parameters you might consider tweaking is -CODEPOOL on the PDOX command line.
The higher the setting you can get away with, the better, up to a maximum of
-CODEPOOL 1167. This will measurably speed up your app...but you probably
can't get that high with only 4Mb...you might start with -CODEPOOL 500 and
inch your way up to see how far you can get before PDOX bombs on you. If
you're running DOS's SMARTDRV, be sure to limit it to 256k (i.e. SMARTDRV 256
256) or eliminate it entirely to gain extra room. Hope this helps...
#: 231135 S8/PAL - USING ·
03-Jun-93 11:54:40
Sb: edit and print a record
Fm: patrice spencer 72360,1027
To: sysop (X)
I have a table that I would like my users to be able to edit but not add any
new information. Can you tell me the best way to program not allowing them to
move beyond the end of the table.
Also, could you tell me the best way for me to allow users to print for one
record in my report form? [A I would appreciate any help you could give me.
Fm: Dan Bernstein (Sysop) 75300,1726
> I have a table that I would like my users to be able to edit but not
add > any new information. Can you tell me the best way to program
not allowing > them to move beyond the end of the table.
IMAGERIGHTS UPDATE is probably the easiest mechanism, but it doesn't let
your users modify the key fields.
> Also, could you tell me the best way for me to allow users to print for
> one record in my report form?
I'd suggest doing a DO_IT! to get out of CoEdit, then
COPYTOARRAY x
CREATE "Answer" LIKE TABLE()
COPYREPORT TABLE() 1 "Answer" 1
COEDIT "Answer"
COPYFROMARRAY x
DO_IT!
REPORT "Answer" 1
CLEARIMAGE
#: 231267 S8/PAL - USING ·
03-Jun-93 23:45:31
Sb: #231084-Thanks to all!
Fm: joseph stoyack 71610,232
To: Chris Read 100014,2273 (X)
I have been a stock market investor for a long time, using Dow Jones to get
my quotes. I also use Procomm as the comm package. I had been manually
writing scripts for Procomm to log on and get the quotes to a file.
Needless to say, that's a lot of work. So I had been automating the process
with PDOX. Any number of lists of stocks are maintained, of course, in
tables. I wrote some PAL to create a script file for Procomm using the list
of stocks.
Then I wrote a SHOWPULLDOWN and associated menu items to create new lists,
open old ones, add two lists together, subtract one from another, empty,
delete, sort, etc. Also use a bunch of dialog boxes to prompt for input and
set all the intercommunication defaults with Procomm and the stock charting
program called MegaTech, which will automatically convert the downloaded data
into the right format for the charting program.
I announced the program's availability last Saturday on (ahem) Prodigy, and
two days before the program was finally completed (semi-vaporware).
So far 22 people have ordered the program, not too bad for under a week and
such limited advertizing!
The program may not sound like much, but the ease of turning something I
found useful into a marketable item using PDOX (not to mention also the fun in
doing the programming) really has me on a "high" right now. I'm already
adding retrieval of company news, user selectable baud rates, options,
futures,....
So I must count myself in the ranks of a very satisfied PDOX user.
Now that other program that I'm also writing.....
#: 231269 S8/PAL - USING ·
03-Jun-93 23:55:53
Sb: PAL Coder Needed NJ/NYC
Fm: Karl Thompson 72366,306
To: All
We are a PARADOX development firm and not a body shop. We presently need an
individual who can help us service the needs of our many accounts. (Mom & Pop
to Fortune 100). We are presently offering 1099 employment to the individual
who can demonstrate superior PAL knowledge and can devote a minimum of 20
hours a week to meeting our needs.
After a 3 month evaluation period, we are prepared to offer full time W2
employment with benefits package.
Please reply via CIS mail.
Offices in NYC and Trenton area.
#: 231567 S8/PAL - USING ·
05-Jun-93 15:27:27
Sb: Menu-Driven Backups
Fm: ROBERT E. BARBER 75720,162
To: Anyone
Perhaps someone can save me some time. I want to create a procedure that will
make it easy for the end user to backup files. The procedure should do the
following:
-ask user which files to backup, all, one, certain types, etc.
-tell user how many floppies will be needed (D.D. H.D., etc.) before
beginning backup
-perhaps even allow user to format floppies without manually exiting (I can
prob handle that ok, but any info will be graciously accepted))
-tell user when to insert new disk
-perhaps use pkzip to compress files
-restore utility, all,one, certain types, etc.
There is probably someone out there who has done this already that can tell me
the ins & outs and save me the time of experimenting. Any info is greatly
appreciated.
#: 229896 S8/PAL - USING ·
26-May-93 14:55:54
Sb: Distributing App Updates
Fm: Les Gainous 72731,146
To: All
I have distributed an application with runtime (v4.02) and would like to know
how I should go about sending my application updates via diskette to each
client. I would like the user to be able to take the diskette, choose (from
my menu) "Upgrade", and have a script take control to update my application.
An upgrade could consist of any or all of the following processes
(non-exhaustive):
o new or modified scripts (including the upgrade script)
o addition (of deletion) of fields -> Restructure
o changing data in an existing field
o new table(s)
Is there a script available (shareware or commercial) that will allow this
type of operation?
Fm: Norman Cavender 70523,463
I do a good bit of updating via floppies sent to our remote offices.
Here is a simple method that works well if you know the location of the
program and app directories on the target computers:
Put an Update.sc on your floppy that does whatever you want: adding new
tables, copying revised family members, modifying data, etc.
Put a DOS batch file (Update.bat) on the floppy to invoke Runtime using
your update script as a command-line switch. For example, your batch
file might be this:
CD PDOXRUN
PDOXRUN A:UPDATE
CD\
You simply instruct the users to type A:UPDATE at the DOS prompt.
Runtime is invoked and it performs the steps you defined in the
update script.
Fm: Brian Bushay (TeamB) 76711,516
To: Wayne Schulz 75410,2434 (X)
>What about restructuring the table with the SS# as key, and then
letting all >the duplicates pop out automatically? -- assuming the SS#
has been assigned to >every field...
tHat will work
Fm: Thomas P Knox 70410,764
I have been using the same approach as Norman suggested to you. One
other thing to keep in mind (this just surfaced for me recently) is to
verify, or account for, all the updates.
In my case, after about the third update disk went out, some sites had
not done update #2. Since each update was expecting a current system,
latter updates may croak because expected files weren't there. I'm not
sure yet just how I'll deal with it yet. One thought I have is that any
update should give you a current system, regardless of the previous
updates. Another thought is to use a control file, and if it isn't
current, tell the user their system is not current and then <take some
action>.
FWIW, some other things I have found useful:
1. You can never have too much error checking, or checking for the
existence of expected files in your update script and/or batch file.
2. I added a menu choice of "Make a Disk for the Programmer". This will
zip up the pertinent files (data files, errorlog file, etc) and put
it on a disk they can send to me for trouble shooting.
3. Since this app is runtime, I added another menu choice (password
protected) to "View All Tables". It does a wait on a table that
contains the name of all the tables in the system. This is for me if
I'm on site and there is no full Paradox, I can roam around the
system (and edit) and look for the source of some problems.
4. A menu choice for "Rebuild System Tables". This will fix just about
any corruption problem they might encounter. It does an ascii export
of data import into newly created table, and copies the family from a
"clean" system directory (stores empty tables with family for whole
system). This way the user can clean up there mess if they like to
farkle the system with abnormal exits.
Fm: Norman Cavender 70523,463
To: Thomas P Knox 70410,764
> In my case, after about the third update disk went out, some sites had
> not done update 2.
That is a point everyone doing remote updates must keep in mind. I use a
minimalist solution, but it has served satisfactorily.
Each app contains an Update table that logs the update number. The
install proc checks this table and presents a message if necessary:
"You have not installed Update 2. Must do so before running this
Update." "This Update has already been installed" Etc.
> Rebuild System Tables ... does an ascii export into newly created
> table, and copies the famil from a "clean" system directory...
Like you, I depend on this as a standard fix users can run whenever an
abnormal exit is flagged. It has worked very well. I cannot recall an
incident that still required Tutility (but it might happen tomorrow).
I have found that the other approach sometimes recommended (Checkplus
Query) is not as reliable. I have seen two corrupted tables where
Checkplus went into an endless loop. The ASCII export succeeded on both
of them.
#: 231420 S8/PAL - USING ·
04-Jun-93 18:04:16
Sb: Ad hoc Reports
Fm: Don Wood 71024,537
To: Sysop (X)
I'm having a terrible time trying to find an add-in product to solve a need; a
need which i would assume many developers have. I want users of my
application to be able to slect a menu choice and create their own reports
without giving them the passwords to the tables. There was a product for
Paradox 3.5 called Adhoc Q&R by Infogence but they (Inforgence) have decided
to abandon upgrading it to work in 4.0. I have looked at Nimbus and R&R
Report Writer but both would require the user to exit my application, start
the report writer and they would have to know the passwords to the tables!
Surely someone has encountered this same problem and has a solution! Please
share it with me.
Fm: David J Murphey (Sysop) 76117,1032
I don't see how any other product could work with a password protected
Paradox table. The file is encrypted. What level of password
protection are you looking for. You can put an auxilliary password on
a table that will only work within your app thats allows report
definition. Users would not be able to use that password to get at the
data from an interactive mode.
Fm: Dan Bernstein (Sysop) 75300,1726
In order to allow your users to modify a report, you need to do something
like the following:
PASSWORD "x"
{Report}{Change} SELECT TabName SELECT RptNo
ECHO NORMAL
WHILE SYSMODE() = "Report"
GETEVENT TO x
EXECEVENT FROM x
ENDWHILE
Fm: Don Wood 71024,537
To: Dan Bernstein (Sysop) 75300,1726 (X)
Its not that i want them to be able to modify an existing report. I
want them to be able to create their own new queries and reports.
Fm: Dan Ehrmann (TeamB) 70007,4644
You might try code such as the following:
password "XXXXX"
menu {Reports} {Change}
select "Table"
select "R#"
{Custom user-defined report}
echo normal
while (true)
retval = getchar()
if retval = -60 then
do_it!
quitloop
else
keypress retval
endif
endwhile
menu {Tools} {More} {Protect} {ClearPasswords}
There are probably a couple of things I have forgotten, but this should get
you started. Note that this code will not work as intended in Paradox
Runtime, since Borland changes the screen to black if you enter the report
editor under script control. The code works, you just cannot see anything!
Fm: P. Richard Wolfe 76424,136
Dan's answer is about the best you can do. But you CAN'T use Runtime,
because you won't be able to let the user see the report designer (we've
got the same problem).
Virginia Sauer [72607,3335] had an adhoc query and report system that
worked under 3.5. You may want to whistle her up and see if she's got a
version that works in 4.0.
#: 229271 S9/UI/Wait/Dialogs ·
23-May-93 22:26:30
Sb: checkbox on the fly
Fm: Mike Downey (CHC) 70404,2657
To: Dan Behar 70761,1404
> Hi: I would like to know if it is possible to create a dialog box with
> multicolumn checkboxes on the fly.
You could write the code for the dialog box to a script file on the fly and
then play the script. I don't know how the execution speed would be. Maybe
that's not critical though.
Otherwise, what I've done is create a dialog box with the maximum number of
of checkboxes that will fit and then use an array for the values of the
labels. Mark the extra ones as "Unused" or something else like that.
#: 229302 S9/UI/Wait/Dialogs ·
24-May-93 03:01:20
Sb: INS and POSTRECORD
Fm: Kevin Ekeland 71722,1534
To: ALL
I have set up a wait table with an event proc. In the event proc I am
trapping for the POSTRECORD trigger and the INS key or a MENUTAG that will
cause an insert, along with other events. In stepping through the event proc
I have noticed the following: Leaving the current record untouched, I hit
INS. The code attaced to the INS key fires. This code generated a new
pri-key value then inserts a new record. After this sequence finishes, the
code attached the POSTRECORD event fires. Why does this happen? As I said, I
left the original record untouched, therefore it did need to post that record.
I have read that an insert causes a post, but I thought is was on the record
you would be leaving, and then only if that record had been changed. Why
would it post the new record before I try to leave it? I get the message
'Posted new record XXX' when I am brought back into the wait. I am doing some
integrity checks in the POSTRECORD routine (such as testing for a blank
record) and I have to set a flag in the insert routing and check it in the
postrecord routine to get past this. Are others running in to this? Is there
a better way around this? What am I not seeing?
Fm: David Orriss Jr (Sysop) 75300,1414
Have you tried a RETURN 1 in your code for the INS keypress?
#: 229358 S9/UI/Wait/Dialogs ·
24-May-93 11:55:44
Sb: How keep lookup val
Fm: Bob Foster 72150,1050
To: All
I have a dialog box where I trap for <enter> key (eventval["keycode"]=13.
Then I do some processing. At this point I tried to change the keycode to
a 9 to make it a tab and process normally. It didn't take so I use
refreshcontrol("mytag") and then selectcontrol "nextfield".
It works except <g> it bypasses the lookup table valcheck.
Fm: Brian Bushay (TeamB) 76711,516
>I have a dialog box where I trap for <enter> key (eventval["keycode"]=13.
>Then I do some processing. At this point I tried to change the keycode to
>a 9 to make it a tab and process normally.
You need to release the ScanCode which takes priority over the Keycode.
Then return true.
#: 229480 S9/UI/Wait/Dialogs ·
24-May-93 18:47:27
Sb: graph procs
Fm: David Altshuler 72603,2562
To: all
I am looking for a graphics proc which will allow me to pass graph attributes
as variables. Commercial add-in, shareware, all ok.
Fm: David Orriss Jr (Sysop) 75300,1414
You might want to look ask in Section 13 -Addins for such a utility. I
know that Command Center from Ensemble has such a capability, but it's an
entire application development system, not just one routine.
#: 229522 S9/UI/Wait/Dialogs ·
24-May-93 22:34:49
Sb: Message in DialogProc
Fm: Nancy A. Peterson 72143,2632
To: sysop (X)
In my dialogproc, my eventlist includes MOUSE and MESSAGE. When I click on a
menu item, my eventvalue TYPE is MOUSE, not MESSAGE (I want it to be
message!).
However, in a waitproc with the same scenario as above, the TYPE is MESSAGE.
Fm: Harry Goldman (TeamB) 75300,1733
Are you trapping MOUSE DOWN in both the Dialog proc and the Wait Proc? A
Mouse down will happen before a message, because it is the mouse down that
causes the message. Either trap for mouse down and in this case ignore it,
or don't trap for mouse down. BUT be consistant in both procs.
Fm: Nancy A. Peterson 72143,2632
In both procedures I'm trapping for mouse down. And in the Wait Proc, the
event type is MESSAGE when mouse clicked on menu, not MOUSE, which is how I
want it to behave.
Now, to get around the dialog proc, I've trapped for key F10, which runs a
while loop and gets the menu selection using GETMENUSELECTION command -- works
fine . Now I need to trap for a mouse click on the menu. Advise on how I can
do this?
Fm: Harry Goldman (TeamB) 75300,1733
In the Wait Proc you have three parameters set by PDOX:
Type, Event, Cycle
Where Event is a dynamic array.
Look at the element Event["Type"], is it a mouse click ? If so you can look
for that.
The same holds for a Dialog box.
#: 229606 S9/UI/Wait/Dialogs ·
25-May-93 09:44:12
Sb: Accept $
Fm: Steve Zilora 71510,1007
To: all
Is there anyway to have dollar signs and commas appear in an Accept field of
a dialog box? I have specified the field type to be $ so it does add the
decimal and the cents, but I'd also like commas and leading $. Thanks.
Fm: David Orriss Jr (Sysop) 75300,1414
The only way to display $ format is in output objects(reports and ?? or ?
statements). Hope this helps.
Fm: Steve Zilora 71510,1007
That's what I was afraid of. Oh well...
On a somewhat related note, is there anyway to change the color of the
entire accept box that has focus? Ie, I want normal color to be wt on
blue and selected color to be reverse. Using the index for select
type-in box (1050) only changes the text, not the whole field. I want
it to be real clear what field the user is in at the time. Thanks.
Fm: Brian Bushay (TeamB) 76711,516
> Is there anyway to have dollar signs and commas appear in an Accept
field of >a dialog box?
No not with a $ or N type field
Fm: Michael Radulescu 71561,3647
What if you paint "$" and color it in the accept line color..? (didn't
try it...) Use PaintPal <smile>
Fm: Steve Zilora 71510,1007
To: Michael Radulescu 71561,3647 (X)
Yes, I could just "paint" the $ on the box (in some color), but the
client had asked for commas as well. Doesn't look like that's going
to happen.
Still hoping for an answer to my other question: what index (if any)
controls the color of the _entire_ type-in box when it is selected?
#: 230726 S9/UI/Wait/Dialogs ·
01-Jun-93 17:55:05
Sb: Pulldown with Dialog
Fm: Herb Ray/Wash.Sqr.Sftwr. 72500,1736
To: ALL
Consider the sequence
{TOOLS} {COPY} {TABLE} {Table_1} {Table_2}
The appearance of this sequence is that of a SHOWPULLDOWN which leads to a
SHOWDIALOG which, in turn, leads to a final SHOWDIALOG.
If we press <Esc> in the first dialog box, we will back up the menu sequence
and land in the second SUBMENU:
+---------------+
| Table |
| Form > |
| Report > |
| Script |
| JustFamily |
| Graph |
+---------------+
Suppose that we wanted to write PAL code which had this exact same look and
feel. This would require that, upon returning control to the SHOWPULLDOWN, we
specify a default tag so that the user would be looking a highlight on {Table},
rather than being presented with the top level menu. The problem is that there
is no way (that I know of) to specify a default tag.
As far as I can tell, Borland hasn't given us the hook into this part of
their menuing engine. It must be able to do it, because Paradox's front end
does it routinely!
Have I missed the point somewhere, or do we have bit of a deficiency in PAL?
Fm: Brian Bushay (TeamB) 76711,516
You haven't missed anything. It is a deficiency
#: 231225 S9/UI/Wait/Dialogs ·
03-Jun-93 20:48:52
Sb: #231115-Accept Colors
Fm: Steve Zilora 71510,1007
To: Dan Bernstein (Sysop) 75300,1726
Dan,
Good idea about the dynarrays. Indexing them on TagValue would work nicely.
Still seem to be a few things up in the air, but that's the fun of it <g>.
#: 230848 S10/Networks/Interop ·
02-Jun-93 09:57:51
Sb: Read-Only directories?
Fm: TODD CARY 73027,3067
To: Anyone
Is it possible for a user with read only rights under Novell for a directory
to read Paradox tables? It appears that the inability to write the
directory LCK file to the "read-only" directory prevents that.
If one had Paradox tables on a CD-ROM on the network, could one read them?
Fm: Brian Bushay (TeamB) 76711,516
Only if there is a DirLock in that directory. And a DirLock will
restrict all users of that directory to Readonly
Again you need a Dirlock on the Cd-Rom directory. And I believe you also
need 4.01 or higher.
Fm: TODD CARY 73027,3067
To: Brian Bushay (TeamB) 76711,516 (X)
I probably was not completely clear in my question. I want to limit some
users to Read-only on some directories using the Novell facilities.
However, when a user attempts to access the Paradox tables, it tries to
place a lock file in the directory. However, the user is Read-only, so
Paradox cannot place or update the LCK file and the user is denied access.
Correct me if I have made an error in my description of the interaction of
Paradox and Novell.
Is there a work around outside of using the encryption facilities of
Paradox?
Fm: Brian Bushay (TeamB) 76711,516
>Correct me if I have made an error in my description of the interaction
of >Paradox and Novell. That is the way they work
The only way around this is to place a DirLock in your Readonly
directory. A DirLock is a special type of Paradox lock that makes a
directory Readonly. Unlike other lock files it is perminant (at least
until you specifically remove it)
{Tools}{Net}{Dirlock}
A DirLock makes a directory Readonly for all users
There is no other way to have a Readonly directory at the network level
that Paradox will use.
Fm: Richard Haven (Borland) 72170,3364
To add to Brian's answer: the DirLock is a Paradox gig. It you have
_any_ kind of Read Only media (e.g. CD-ROM), you must have a DirLock
in each R/O directory. It harmonizes the R/O aspect of the media by
telling Paradox that it is, in fact, R/O.
Fm: Mike Downey (CHC) 70404,2657
To: TODD CARY 73027,3067
> I probably was not completely clear in my question. I want to limit some
> users to Read-only on some directories using the Novell facilities.
In summary, someone with Read/Write rights to the directory has to use
{Tools} {Net} {Lock} {DirLock}. I believe that no one else can be in the
directory at the time. If you are not on a "real" network, you'll need to
use the -share command line parameter to lock the directory
After that point, the directory rights can be set to ReadOnly via the
network software.
I'm pretty sure that you can't use the command CoEdit TableName where
TableName is in the locked directory. You can however, use View TableName
then CoEditKey. If you then try to edit the table, you'll get a message
telling you that the table is write-protected (I think).
#: 228810 S13/Addins/Training ·
20-May-93 18:28:37
Sb: PAL-Edit extra proj info
Fm: Mark Lebowitz 70712,2660
To: all
Is there some way to tell PAL-Edit's project manager to ignore specific tables
and scripts when defining or regenerating a project? It's picking up on
various junk, scratch and utility scripts and tables in the work directory.
Fm: Dan Ehrmann (TeamB) 70007,4644
Instead of regenerating the whole project at once, regen the scripts
dictionary first.
This dictionary is used for the procedures and variables dictionaries, so
before regenerating these ones, edit the scripts dictionary and delete
the scripts you don't want.
There is no simple way to restrict the tables dictionary. But it is so
small and so quick that you could just ignore the extra tables.
Another alternative is to put your scratch tables in one subdirectory
below the master, and then exclude this directory from the project
definition. (PAL - ProjManager - Define/Create)
#: 228841 S13/Addins/Training ·
20-May-93 22:43:10
Sb: downloading from a M/F
Fm: Mark E. Meyer 72260,2524
To: All
I've been asked to look into products that aid in the "downloading" of
mainframe data. I'm looking for products that I could execute directly from
my PAL applications.
Presently I'm shelling out to dos and then executing "RECEIVE" commands from a
batch file. When the "receive" is done it returns to my SHOWMENU and the
operators select other options to further process the downloaded data on the
PC (such as Conduit).
Although this approach is efficient, its not very "friendly" for our operators
who do this on a nightly, weekly & monthly basis. For one thing, there is no
error trapping or logging if a gateway goes down.
I'm looking for the following features..
1) execute directly from PAL procs
2) work with TSO receive command
3) allow the operators to select given files from a "dialogbox" style menu
4) notify operators if a M/F download goes bad, and/or continue with the
rest of the files marked for download
Fm: Don Schubert (TeamB) 70007,4654
Depending on the volume of data concerned and your firm's budget, you
might want to talk with the Irons Group (Query 9track. Query 16track)
folks. They have direct mainframe/pdox solutions.
#: 228904 S13/Addins/Training ·
21-May-93 08:33:18
Sb: Barcode Help Needed
Fm: Dick Reuben 73767,3655
To: Sysop & Lurkers (X)
I have a client running an app that I wrote for him in 3.5, and he'd now
like to add the ability to export the content of an A12 field so that it can
be handled by some barcode software and reader---he's yet to decide which
ones he wants to use.
My guess is that he'll also want to use the barcode to access records in the
same table.
I know as much about barcode as I do about ICBMs. I'd appreciate any help
that anyone can offer in the Care & Feeding Of Barcode, in terms of in what
format data should be exported and imported.
Fm: Michelle Kelsey (Sysop) 71333,120
I've found three companies which you can contact for more information
about barcode software. 1. Worthington Data Solutions/ Santa Cruz,
CA/ (800) 345-4220 or (408) 458-9938 2. American Micro Systems/ Eules,
TX/ (800) 648-4452 or (817) 571-9015 3. Bear Rock Technologies/
Diamond Springs, CA (800) 232-7625.
Bear Rock's Bar Code Labeler for Windows was previewed in the March
issue of the Paradox Informant. This issue of the Informant also had a
two page article which discusses Bar Codes in general. You can get
back issues and a subscription to the Paradox Informant by calling (916)
686-6610.
#: 229059 S13/Addins/Training ·
21-May-93 21:08:30
Sb: #228380-Installation Programs?
Fm: Tom Gifford 76662,3072
To: CHRIS BORGERS 73207,1467
Try PC-Install from 20/20 Software. It is very easy to use and gives you a
very professional looking screen. It's only $99 with unlimited distribution
license.
20/20 Software is also the developer of the Nimbus Report Writer and WestLake
Imager for Paradox. The phone number is (503) 520-0504.
#: 229076 S13/Addins/Training ·
21-May-93 22:28:44
Sb: #228538-PaintPAL v2 problems
Fm: Ted Rosenberger 70313,1610
To: Alan M. Dunsmuir 100016,1251
Try adjusting the settings in the PaintPAL PIF file (you are using it aren't
you). Perhaps you have a non-standard system font installed and that's why
you're only seeing 23 lines. It works fine on every machine we've tested.
I have no idea why your mouse doesn't work. Are you using the latest MS mouse
drivers (8.20 I believe)? Are you using a non-Microsoft mouse or perhaps a
PS/2 connection? Sometimes these things can be problematic. Have you tryed
running the real-mode version of PaintPAL 2.0 (PPREAL.EXE)?
PaintPAL 2.0 was rewritten in Borland Pascal 7.0 so there ARE some fundamental
internal changes (none of which were made by Target Software).
Let me know what you find out.
Fm: Alan M. Dunsmuir 100016,1251
To: Ted Rosenberger 70313,1610 (X)
<<Try adjusting the settings in the PaintPAL PIF file (you are using it aren't
you).>>
Yes, I am. Which settings do you suggest? None seems directly associated with
the size of window to open for the program. Since that seems changeable by the
'Video...' option in PaintPAL's own menu, I would have thought some file of
initial conditions or configuration ought to be what I'm lloking for to
change. But there doesn't seem to be one.
<<Are you using the latest MS mouse drivers (8.20 I believe)? Are you using a
non-Microsoft mouse or perhaps a PS/2 connection?>>
I'm using a non-Microsoft (but "Microsoft-compatible") serially-connected
mouse, which works with every other mouse-supporting program on my system
(including Paradox 4 and PaintPAL v1). Do you have any information from
Borland about limitations in their Pascal/mouse compatibilities?
The precise symptom is that, when PaintPAL is windowed I see a Windows-type
arrow cursor which works everywhere but inside the PaintPAL window. When I
"full-screen" PaintPAL I don't get the "block" mouse cursor that I have in
Paradox 4 and had in PaintPAL v1.
I'll try running PPREAL.EXE on my home machine and let you know what happens.
Fm: Robert Hancock 74020,3446
To: Alan M. Dunsmuir 100016,1251 (X)
I assume from this last message that you are running PaintPal in a DOS box
under Windows. Does it work for other DOS applications run in a window?
In SYSTEM.INI what is your setting for "MouseInDosBox="? If it is set to ZERO
then when a DOS application is in a window the mouse will not function as a
DOS mouse. The advantage to this is that is makes it easier to cut and paste
from DOS to window applications. (i.e., highlight information in the DOS box
and press ENTER and it is copied to the clipboard.) If you set it to 1, it
should function like a DOS mouse for that application within the boundaries of
the window.
Fm: Alan M. Dunsmuir 100016,1251
To: Robert Hancock 74020,3446 (X)
Thanks for the tip, Robert. I'll check when I get home to see what it's set to
on my home machine. I've just checked in the office and there's no entry in my
SYSTEM.INI here for "MouseInDosBox" at all.
<<Does it work for other DOS applications run in a window?>>
Yes - the irritating thing is that Paradox 4 works perfectly. (And I rather
think PaintPAL v1 did too, but I overwrote it when I installed v2.)
But see my today's response to Ted. PPREAL.EXE works fine in full screen mode
on my home machine, so I'll stick to that. (Unless I can get it to work with
"MouseInDosBox" <g>.)
Fm: Don Schubert (TeamB) 70007,4654
To: Ted Rosenberger 70313,1610 (X)
No prob with PPREAL. Am using QEMM6.02. Machine is a T3300sl/25 with 8mb RAM.
Happens when you shell from Pdox and bring PaintPAL up. Seems like the TAB key
isn't getting trapped in that instance. When you do it in PPREAL, nothing
happens or there may be a beep (I forget which). Did you try it on your
machine?
Fm: Alan M. Dunsmuir 100016,1251
To: Ted Rosenberger 70313,1610 (X)
Ted - here's the information from my home machine. At least I've got a way out
of the problem, but the question remains why the problem ever arose in the
first place.
Machine: 8Mb 486/33 with AMI-BIOS, SVGA screen and a LongShine serial mouse
(running in Microsoft emulation mode); MS-DOS 5 and Windows 3.1
Running PAINTPAL.EXE directly from within Windows was identical to running
from the PIF. The program started up in a rather small window and had no mouse
functionality within the bounds of that window. (Its Control Bar, and Min/Max
buttons, worked as expected by mouse.) Switching to full screen (by pressing
Alt-Enter) provided no mouse functionality.
In contrast, PPREAL.EXE started in full-screen mode within Windows, and HAD
mouse functionality. This was lost when windowised (by pressing Alt-Enter),
but regained when returned to full screen.
Outside Windows, when started directly from the native DOS prompt, both
PAINTPAL.EXE and PPREAL.EXE displayed full mouse functionality.
I would suggest that this problem of lack of mouse functionality in Windows,
when running in a Window, and when using the expanded memory version, (a
problem NOT shared, by the way, with Paradox 4) is most likely to be a Borland
Pascal problem.
Since I am committed to running everything within Windows, I will use PaintPAL
v2 on my home machine by running PPREAL.EXE in full screen mode. Can you tell
me what functionality I am likely to be losing by running in this mode rather
than with the full, virtual memory, PaintPAL?
Fm: Ted Rosenberger 70313,1610
To: Alan M. Dunsmuir 100016,1251 (X)
I'll look into your problems more when I have a chance.
There is no functional difference between PPREAL.EXE and PAINTPAL.EXE.
PaintPAL.EXE is a little faster since it doesn't use overlays. Also, it can
handle monstrous dialogs and import very complex forms... but for normal
dialog work you won't notice any difference.
Fm: Bob Spencer 72357,2514
To: Alan M. Dunsmuir 100016,1251 (X)
Try setting the "Detect Idle Time" Box in the advanced section of the Paint
Pal Pif off when trying to run with the "Windowed" option.
Fm: Alan M. Dunsmuir 100016,1251
To: Bob Spencer 72357,2514 (X)
<<Try setting the "Detect Idle Time" Box in the advanced section of the Paint
Pal Pif off>>
Magic, Bob! Goodness knows why, but when I did that and then changed the video
option from "A:" to "B:", I got a nicely filled screen on my office machine.
I've yet to see whether that parameter (what DOES it do, exactly?) has any
effect on the mouselessness on my home machine <g>.
Now if only there was a way I could save that video selection so that it was
"B:" when I next started, instead of reverting to option "A:"...
Fm: Ted Rosenberger 70313,1610
To: Alan M. Dunsmuir 100016,1251 (X)
Whoever reported that PaintPAL crashes when pressing the Tab key when nothing
is loaded in PaintPAL is right!
We'll get it fixed in the upcoming maintenance release.
Fm: Bob Spencer 72357,2514
To: Alan M. Dunsmuir 100016,1251 (X)
Another trick to try if your mouse doesn't respond is to check the
"Background" box under "Execution" in the
PIF, and leave "Detect Idle Time" off. I have to do this to get PX 4.00 to
Run under Windows on my machine.
Detect Idle time is supposed to give more time to other apps when the app is
not being used. Frankly, I can't
tell the difference on my machine. See pg. 271 of the Windows User's Guide.
#: 229090 S13/Addins/Training ·
22-May-93 01:56:12
Sb: #229076-PaintPAL v2 problems
Fm: Thomas P Knox 70410,764
To: Ted Rosenberger 70313,1610
A minor problem with 2.0. In modifying the colors for a dialog box, the
colors showing for the dbox while the color palette was active changed
slightly when I quit modifying the colors. I was designing a
Pickdynarrayindex and modified the highlight bar colors. When I saved them,
they changed. When I went back to remodify them they would change back to
what I wanted them to...save again and they switch...modify, ok...save,
switch...endless loop.
Same thing happened for the non-default pushbutton.
Fm: Ted Rosenberger 70313,1610
I think I know what you're talking about and it's definately NOT a
PaintPAL 2.0 bug.
There are two different color palette entries that control the color of
a pick list's highlight bar:
"Picklist Focused" and "Picklist Selected". "Picklist Focused"
determines the color of the highlight bar when the picklist is the
currently selected element on the dialog box. "Picklist Selected"
determines the highlight bar's color when some other element on the
dialog box has the input focus. When you go into Test Mode in PaintPAL,
tab around the dialog box and you'll see that the color of the highlight
bar changes when the picklist receives the input focus. If you want the
highlight bar to stay the same color all of the time, set "Picklist
Selected" and "Picklist Focused" to the same color.
The same situation applies to "PushButton Default" v.s. "PushButton
Selected".
#: 229094 S13/Addins/Training ·
22-May-93 07:32:38
Sb: WP4 HELP
Fm: Tucker Brawner 73455,1440
To: 71171,1340
I can setup a desktop and do simple editing under the XXsetup.sc, but can't
seem to go any further.
Perhaps I have not spent enough time with the manuals, but I don't find WP4
particularly intuitive. Is there a 'simple' example somewhere that will
help me begin experimenting? I have a fully functional 3.5 application and
bought WP4 with the hope it would smooth the transition to 4.0. I suppose
what I really need is a listing of the steps in the development cycle. The
closest I could find was the 2.0 to 4.0 migration chapter...but I never
used any prior WP and that chapter is Greek to me.
Where is the equivalent structure for my current(quite large) WAIT ...
ENDWAIT controlling loop in WP4? I tried to run wdemoapp.sc and it crashed
looking for libname.a which I don't know where to define. How do I link my
old WAIT(3.5) procedures to the new WP4 desktop? I am stuck and
frustrated.
Fm: Don Schubert (TeamB) 70007,4654
You need to start WPP4 with menuwp.sc, not wdemoapp.sc. Try working
through the small users guide and then the examples.
Fm: Andrew Appell 74007,146
I believe that once you become familiar with the approach to using WP4
you will find it an extemely powerful tool.
>> Is there a 'simple' example somewhere that will help me begin
experimenting? The 8 demo applications range from a simple tableview to
a "kitchen sink" with multiple tableview, formview, editor and canvas
windows. The code which controls these is in wDemoApp.sc and will give
you an idea at which action point to attach your code to create
customized behavior. The code for Demo 4, for example, will be
indicated by CASE demodesktop.a = "4" in the various action procedures.
>> I have a fully functional 3.5 application and bought WP4 with the
hope >> it would smooth the transition to 4.0.
In order to make the most of WP4, it is important to have a basic
understanding of the new event-driven WAIT which is quite different from
the 3.5 WAIT .. UNTIL. It is difficult without seeing your application
to know what the functionality is, but odds are there is an action point
in WaitPlus Pro to attach the various units of your code, modified to
use the WP4 variables and return a numeric value (0 or 1 in most cases).
In addition to the Paradox triggers, there are >20 other action points
defined by WaitPlus (such as PrepAdd, DepartEdit, etc.) where you can
invoke your custom code. These are defined in Chapter 3 of the
Programmer's Guide.
>> I suppose what I really need is a listing of the steps in the >>
development cycle.
1. Create your tables and forms (a good start, I think <g>).
2. Define the table rights (user editing rights) for each table in the
app either by using the ScriptGen setup utility or manually creating
a setup script with the table/form window definitions. i.e.
MySetup.l() TableRights are explained in Chapter 2.
3. Make a copy of wWP4App.sc and begin adding custom behavior to the
appropriate action points by associating a procedure with the
corresponding wpActionProcs.y[] dynarray element. i.e.
wpActionProcs.y["PREPADD"] = "MyPrepAddProc.n" Compile this script
into a library of its own and place it first in the autolib
definition, before the WaitPlus library. i.e. autolib =
"MyLib,C:\\WP40\\WP40" Call WaitPlus passing the name of your setup
proc. i.e. WaitPlus4.v("MySetup.l")
I hope this has been helpful to get you on the right track. Any other
questions can be either posted on this forum or called in to PBE.
Fm: Steve Erbach (NEWPALS) 70620,3432
>> Perhaps I have not spent enough time with the manuals, but I don't
find WP4 particularly intuitive. <<
I am not a Borland employee; neither am I employed by PAL by Example.
I'm just a (very) satisfied PBE customer who finds it hard to believe
what I've just read.
I own WaitPlus Pro v. 4.0. I was absolutely thrilled with it as it
helps me avoid the immense travail involved with constructing WAIT
ENDWAIT controls that are complete, safe, consistent and bug-free.
Paradox 4.0 does require the acquisition of some additional programming
skills. On page 2 of the WaitPlus Pro Programmer's Reference mention is
made of the aspects of PAL one should be familiar and comfortable with
before you can use WaitPlus Pro to its fullest extent:
Procedures, including formal parameters and private variables PAL
Procedure libraries AUTOLIB-the autoload library The Event Model and
Event-Driven WAIT command
I notice from your message that a WaitPlus script crashed because it
couldn't find a library name. That's because it is part of the suite of
scripts that create the WaitPlus Pro libraries. It doesn't run
independently because it's merely a collection of procedures that are
called by WaitPlus.
I can't explain how libraries work in a short message. You'll need to
read up on them in the Paradox documentation. I suggest you spend some
time with the PAL manuals before you tackle WaitPlus Pro.
Fm: Steve Caple (TeamB) 76711,520 To: Steve Erbach (NEWPALS) 70620,3432
I've got to say that I'd also appreciate a concise outline of steps,
files needed, hooks to grab for various basic functions, etc., for
developing and then shipping a runtime WPP4 app. And I've been using
procs and libs for years, am familiar with scoping variables, passing
parameters, etc. (just not familiar with WPP).
I really like what I've seen working with the new WPP - but a condensed,
broad brushed outline would be nice so I didn't have to digest or tease
it out of the docs; sort of a "Quick'n'Dirty Guide for PAL Programmers".
A more comprehensive index would help, too.
Fm: Alan Zenreich (ZS/PBE) 71171,1340
To: Steve Caple (TeamB) 76711,520 (X)
I agree that I'd like to see a "Quick and Dirty Guide..." perhaps I
could twist your arm for some help with such a project. It could be
included with future copies of the product, or be posted on-line with
tips and tricks.
So, what I'm saying is that I'd like to take it one step beyond a simple
pringed manual. A dynamic collection of user solutions and issues could
be very valuable.
#: 229142 S13/Addins/Training ·
22-May-93 15:41:51
Sb: #229078-PaintPAL v2.0 Questions
Fm: Ted Rosenberger 70313,1610
To: Les Gainous 72731,146
There's easy solutions to both of the issues you raised!
Don't delete the PaintPAL_Frame_Begin and _End marker comments that PaintPAL
embeds in the generated code. The parser uses this to reconstruct the
chiseled frames as 1 element.
In PaintPAL 2.0, the highlight color of chiseled frames is determined by the
color specified in the frame's setup box. Give it a try!
Fm: Les Gainous 72731,146
To: Ted Rosenberger 70313,1610 (X)
Now that I can import the code, I'll leave the markers in. Before,
(v1.0) there was really no need for me to keep them in because once I
put the code in a script, I ended up changing the color of the hilited,
chisled sides. This, in effect, would "sever" the link back to PPal.
#: 229162 S13/Addins/Training ·
22-May-93 18:06:45
Sb: WBSLIB2 Problems
Fm: Michael D. Miller 76130,1734
To: Angelo Laudon-WBSLIB2 76467,424
A few problems with WBSLib2, Version 2.06:
Without the use of Opts["EditMode"] = "Table" I cannot use F3/F4 after
going into Change F or Insert. I can only use F3/F4 in View mode.
Makes it very cumbersome for user to go to another form on screen during
edit. Paradox interactive lets you go to diff forms while in
edit/coedit.
If I use Editmode/Table and Autoadd, Autochange, I get some unusual
results. Multitable forms (4 forms). When I pressed F4 from the second
or third form, I go back to #1. When I add a new record in Form #1 and
press F4 in order to move to #2, the record flys away and I am in #2 of
some other record. If the user then begins to edit again, they will be
in the wrong record. Whenever the cursor returns to #1, and you press
F4, the cursor skips over #2 and goes to #3. I checked the order of my
"tables" and made them the same order that the tables were imbedded. If
you save #1 and moveto #2 and press F9, the cursor jumps back to #1. If
you press F4 it skips whichever form you just tried to edit and goes to
the next form in line. ie. If you are on #3 and hit F9, you go to #1.
If you press F4 to get down to #3 you skip over #3 and go to #4.
One time upon exiting my submenu to my main menu, I got an Unexp Cond
and got kicked to DOS.
Can't press ALT-0 or ALT 1-4 in coedit mode (F9).
Does your referential integrity just check the occurance of records in
the form BEING USED, and not all forms that are used with that master
that are not currently on screen?
#: 229198 S13/Addins/Training ·
23-May-93 10:12:38
Sb: Blob viewing
Fm: steven brand 71051,637
To: All
Does anyone know of a good Blob viewer (do not need to edit the field) that
could be integrated into a recipe database that stores scanned recipes into a
Blob type field? I would like the user to be able to look at the recipe and
print it (if this is also possible).
Fm: Don Schubert (TeamB) 70007,4654
VPIC is available (shareware) in many LIBs here. GO IBMFF to find where.
Fm: Michelle Kelsey (Sysop) 71333,120
To: steven brand 71051,637 (X)
> Does anyone know of a good Blob viewer (do not need to edit the field) that
> could be integrated into a recipe database that stores scanned recipes into
> a Blob type field? I would like the user to be able to look at the recipe
> and print it (if this is also possible).
There are three Blob editors discussed in the September edition of the
Paradox Informant. dGT: Database Graphics Toolkit (708) 453-9590, WestLake
Imager (503) 520-9918, and QuickView Plus (407) 331-1996. You can get back
issues of the Informant by calling (916) 686-6610.
Fm: Don Schubert (TeamB) 70007,4654
To: Michelle Kelsey (Sysop) 71333,120 (X)
If he just needs a simple blob viewer (lik a .gif file viewer), all of these
are overkill. They do far more - and are priced to match <g>.
Fm: Tom Gifford 76662,3072
To: steven brand 71051,637 (X)
You can call 20/20 Software at (503) 520-0504 for a free brochure on the
WestLake Imager. There's a review in Databased Advisor Feb. this year. A new
version of the WestLake Imager (2.0) was shipped last month with built-in
zoom, pan, and many other features.
Fm: steven brand 71051,637
To: Tom Gifford 76662,3072
Thanks very much. I'll look over the review. I have been trying a viewer
called TPICEM (found in PICEM.EXE). It took me a while to figure out that I
needed to put a "*" after the executable file name but now it seems to be
working.
Fm: steven brand 71051,637
To: Don Schubert (TeamB) 70007,4654 (X)
Don - thanks very much for the suggestion. I initially had trouble figuring
out how to get the Blob editor to open the file automatically -- looking
behind the "help" screen gave me the answer -- I needed the "*".
#: 229301 S13/Addins/Training ·
24-May-93 02:18:14
Sb: WaitPlus Triggers
Fm: Gary M. Mugford 70274,2254
To: Alan Zenreich 71171,1340 (X)
I have discovered a discrepancy between the manual printed code and the
actual code in the wp4SpeedBarRapidRewind and RapidForward procedures in
the Core9 script.
I went hunting for the code in that area because of a problem I had with
the jump speedbar keys. I had declared a PostRecord procedure that was
being called whenever the jump keys were being called but wasn't being
called by single move keys or the database end keys. I found this unusual
and a little bit of a bother. In my case, I was calling a FILL_IN_FORM()
function that fills in a variety of fields whenever there is a change of
any sort (fill in Status, Status Date and a memo Follow_up field
automatically). This had a discerning habit of being called unintentionally
by the speedbar. I commented out the the if statement on line 767 and the
problem went away, replaced with a problem of duplicated behaviour of auto
posting when exiting the waitplus statement. Finally, I restored
everything to snuff and moved the PostRecord auto-filling into the
OKRecord procedure. That worked.
So, a few questions ... What effect is gained by the if? ... Why are the
jump keys treated so much more differently then the other movement keys?
Don't all six keys result in the same thing, a LeaveRecord followed by an
ArriveRecord? It's just a matter of degree as to how far. ... At one point,
I was close to curing the individual problem by over-writing the function
keys 3 and 6 with definitions of my own. I didn't try it, but is it
possible?
It's been a hectic month, with the arrival of your product, Style Guide,
User's Base and some other stuff. But it's been the most productive month
of learning I've had yet. In large part, that's due to your code and the
massively commented listing. Thanks.
Fm: John Rendell 70474,377
To: Gary M. Mugford 70274,2254 (X)
Gary - to see what is going on, enable the event tracer. This will tell
you what is being called and in what sequence. The WPP event model is
different from Paradox as far as what triggers are being called. This
can lead to some confusion (It took me a few hours to figgure out why
some things were happening 'out of sequence' <G>).
Fm: Andrew Appell 74007,146
To: John Rendell 70474,377 (X)
The WaitPlus event model is not really different from that of Paradox.
In cases where we are explicitly creating a trigger sequence, they
always take place in the order that they would occur if Paradox was
generating the same triggers implicitly.
There are situations where we are calling a more complete sequence than
Paradox would normally call. For example, consider 2 simple table views
on the desktop. If you start editing "Table1" and then press [F4],
Paradox would implicitly call only DEPARTFIELD, DEPARTROW, DEPARTTABLE
for "Table1" and ARRIVEWINDOW, ARRIVETABLE, ARRIVEROW, ARRIVEFIELD for
"Table2", leaving the changes to "Table1" pending. For the same
keypress, WaitPlus will fully validate the departure from "Table1"
calling DEPARTFIELD, DEPARTROW, DEPARTTABLE, POSTRECORD, DEPARTWINDOW (a
WaitPlus construct - DEPARTWINDOW does not exist in Paradox) for
"Table1" (thus leaving no changes pending) before calling ARRIVEWINDOW,
ARRIVETABLE, ARRIVEROW, ARRIVEFIELD for "Table2".
As you have said, the Event Display can be of tremendous help in
learning both the new event model and WaitPlus by showing exactly the
triggers/actions which result from each event.
Fm: Gary M. Mugford 70274,2254
To: Andrew Appell 74007,146 (X)
Not to nag, but why the different treatment of RapidRewind to Home or
Left Arrow? They each do the kind of things that all these triggers
interact with, yet only RapidRewind triggers the PostRecord reflex?
Fm: Andrew Appell 74007,146
To: Gary M. Mugford 70274,2254 (X)
>> I have discovered a discrepancy between the manual printed code and
the >>actual code in the wp4SpeedBarRapidRewind and RapidForward
procedures in the >>Core9 script.
Between the time the code was prepared for printing in the manuals and
the time the master disk for duplication was created, we saw an
opportunity to add to the functionality of the release version of WP4.
One such new feature, mentioned in WPPRO.DOC, is the ability to call
WP4LookupSelect.n() to do a pseudo-lookup on a formview. To accomodate
this, a new window type was created: LOOKUPFORM. Code which did logical
operations on wp.y["Window.a"] was slightly modified to allow for this
new value.
Let me add a little to the code section starting on line 767 of
wWP4Cor9.sc:
IF wp.y["Window.a"] = "FORM" THEN
; A normal formview window where editing may be done.
n = WP4CallTriggers.n("VC,DF,DR,PR")
ELSE ; "LOOKUPFORM"
; This procedure was invoked while in a pseudo-lookup on a
; formview window for the "lookup" table. No editing is allowed so
; there is no need to validate the field/record departure or post
; any records.
n = 0
ENDIF
>> Why are the jump keys treated so much more differently then the
other >>movement keys? Don't all six keys result in the same thing, a
>>LeaveRecord followed by an ArriveRecord?
While all six SpeedBar movement buttons do result in a departure from
one record and arrival on another, the technique is not the same for
all. A mouse click on the "Home", "Previous", "Next" and "End" SpeedBar
buttons is converted to a KEY event with the appropriate ["KEYCODE"]
element and thus processed by the wait proc as if the key had been
pressed by the user. Paradox will *implicitly* call the proper trigger
sequence for the key which may or may not include POSTRECORD depending
on whether the record you are leaving has been modified.
There is no equivalent single key to "jump" 10 master records in
formview (although we are able to do so, it's not practical to convert
the button click to 10 [Ctrl PgDn] key events). For the "FastForward"
and "RapidRewind" buttons, we are *explicitly* calling the most complete
departure trigger sequence that could occur which in this case includes
POSTRECORD, doing a MOVETO RECORD <current record#> + <fast forward
increment>, then *explicitly* calling the arrival sequence for the new
record/field.
By the sound of the nature of your Fill_In_Form() proc, it might better
be placed in the DepartEdit or DepartAdd action points (or possibly in
OKRecord as you have done). The "PostRecord" action point is provided
as a means to let you substitute your own record posting routine
(although we recommend you let our WP4PostRecord.l() take place, as
would happen normally).
Fm: Alan Zenreich (ZS/PBE) 71171,1340
The WaitPlus reference manual went to press two months before the
finished product shipped. We opted to update the code wherever
necessary, so users have the most up to date code base. Most of the
changes are listed in the WaitPlus.Doc file.
I'll let Andrew respond to some of the more delicate speedbar issues.
SpeedBar and Zoom issues are a bit more complicated than I originally
thought, so perhaps he can spread some light on the way it was
finally implemented, and why.
Meanwhile, the OKrecord is probably the right place for it anyway....
Fm: Gary M. Mugford 70274,2254
To: Alan Zenreich (ZS/PBE) 71171,1340 (X)
Actually, Andrew did a good job pointing me in the right direction.
Yeah, some things in the learning curve are a little steep for guys like
me, but I get lost stepping outside my front door. The learning process
is proceeding and I'm actually starting to understand the why-fors and
the huhs? of the process.
The speedbar issue is receding in the rear-view mirror and I'm
concentrating on getting these CallTriggers down pat. Otherwise, my
newfound knowledge on speed bars goes south.
#: 229483 S13/Addins/Training ·
24-May-93 19:15:10
Sb: EventMan and MultiForms
Fm: Henrik Bechmann 72701,3717
To: george reis 70724,1324 (X)
>>EventMan ... use Case statements because imbedded tables are sub-objects,
etc.<<
>>wonder if you have considered making the *table* the basic object.<<
>>In 4.0, the table is in a window, but that's just a package. I am really
interested in the contents, so why not define the object as something I work
with all the time? Comments?<<
I consider the window to be an attribute of the interface object between the
user and the program. The logic of getting at sub-objects, as far as I can
tell, is to query the window-level object (typically the form) as to the the
current subobject. This is not always easy, particulary when the form is not
current. Another consideration is that a table presented as an embedded form
in one window may not mean the same as a table embedded in a different form.
For instance in one form a table may be a (possibly hidden) lookup object,
whereas in another form it may be an editable object. This depends on your
design standards and levels of complexity.
IAC, the answer I think is to extend the .GetObjectTagAndType logic so that
the routine looks further than the window level object for the target object.
There are a few alternate ways of doing this, but to begin with you would have
to give tables object names. (This could be just the table name if it will be
unique in the object name space at any given time, or you could generate a
unique object name for each table.) Then your GetObjectTagAndType routine
would have to lookup the target object for the event based on the target
window object. You could do this by having a current object array that you
maintain during yoru program, but this is difficult in the absence of a
DepartWindow trigger. Otherwise you could have a lookup dynarray that held a
list of window level objects and their subobjects, by Paradox table name. This
is essentially the [<FormObjectName> + table()] = "SubObject" idea. Then
whenever you target an event for the window, if the window is current, you can
get the object name directly by concatenating the form name and table. If the
window is not current, you could target a default table, or if you find some
way of keeping the name of the last table on a form that was current, then you
could use that. Targeting a mouse event is more difficult, because we don't
have a tableAt() function. By convention you might want to send mouse events
to the window level object (typically a form).
Another complication is that in going to the subobject or component object
idea, you have introduced the notion of parent objects. This is in principle
highly desirable (PdoxWin's containership is a form of object hierarchy) but
it means tracking parent-child relationships as well as type relationships.
Not a trivial task. The object hierarchy I (currently) use is:
TABLE
BLOCK (embedded form)
PANEL (presentation form)
The search strategy for event dispatch then becomes:
1. identify the target (beginning) object
2. search its type hierachy
3. search its object parent object
4. continue at 2 for the parent object, iterartively, until exhausted.
5. if not found, then do default, else fire found proc.
This is a form of message forwarding that encompasses ideas from the OOP
inheritance model, as well as ideas from PdoxWin's containership model.
Of course you don't have to make things nearly so complicated, if all you want
to do is send an event to a table and be done with it. In that case some kind
of simple lookup in the SetObjectTagAndType routine is all you would need.
Hope this gives you some ideas. I doubt that I will modify EventMan
significantly in the future. My DOS development work has and is going into my
more advanced application framework. If that matures soon enough to be of use,
then I would certainly consider releasing it, but the refinements are slow and
iterative, so I wouldn't expect to consider that before late fall at the
earliest.
-------------------
> Wait table
> Proc "EventMan.CatchTrigger" All
> EndWait
There is no reason I can think of why this shouldn't work: Paradox can
certainly take nested waits; this form doesn't interfere with global
variables, such as EventMan.Dictionary[]; there's nothing I can think of that
would restrict the events being captured by your wait statement. Some event
handlers have different effects under wait table, I believe (more
restrictive), but that doesn't seem to explain your problem. Can you give me
an example?
Fm: george reis 70724,1324
To: Henrik Bechmann 72701,3717 (X)
Between your answer and Howard Bullock's, I have more than enough to play
with! As far as improvements in EventMan are concerned, he is certainly
satisfying my needs just the way he is. (Of course, any future
contributions from you will be certainly appreciated.)
As far as the imbedded "Wait workspce" problem I had--its good to know
that you don't see anything wrong with what I was trying to do. I
don't have a simple example at the moment. The next time I face the
situation, I'll spend more time with it, and report my findings then.
#: 230187 S13/Addins/Training ·
28-May-93 04:19:59
Sb: WPP4
Fm: Thomas P Knox 70410,764
To: Alan Zenreich 71171,1340 (X)
I would like to second (or third) the idea for a tutorial on how to set up
an application to use WaitPlus Pro. Although the documentation has a lot
of good info about the technical side of WPP and is sufficiently clear on
how to use ScriptGen, I couldn't find anything that said what steps to
follow to incorporate WPP into an application.
True, you can disect the code to understand what each line of each
procedure is doing, but not the basic building blocks of building an
application. It is somewhat like reading an Agatha Christie novel - all
the facts are there, but you have to "sleuth" them out.
Example:
I got through ScriptGen and configured a two table two form workspace which
created the table and form dynarrays and the initial call to WPP. But I
had difficulty figuring out just where to list the keys I wanted to trap
for. The reference to the wpSpKey.r array said it was for "special" keys,
but I just wanted to trap for the "usual" keys of F2, F3, etc. Without
skimming the code I didn't know what keys WPP was already trapping (found
on page 95 in the code for WP4ImageWaitSpec.u()), and as of now, I don't
know what order F2 will be processed in, if WPP does its posting processing
on F2, but I want it to end my wait session.
I think I have F1 somewhat under control if I want to do my own lookup
procedure (which is call a dialog box with a picklist for a particular
field) by placing a procedure name in wpActionProcs.y["PREPLOOKUP"]. But
I'm having difficulty in adding to the lookup table. The documentation
does not seem to talk about manually bringing in another table changing the
waitspec for different keys and returning control back to WPP. I stumbled
through it and have it working to a degree, but it feels clumsy...and what
does one do about not being able to leave the table until the record is
posted. I called PostRecord4.l() (listed as PostRecord.l in the docs) but
it didn't seem to cure the problem. I reverted back to my pre WPP days and
first move to an embedded unlinked 1 field 1 record table before departing
the form. Somehow, though, that doesn't "feel" like an "approved" way to
do it.
I would opt to forego the inclusion of the source code in the manual in
lieu of a chapter or two on how to use WPP to its fullest. Reading the
source code for the demo scripts just isn't that helpful in understanding
the underlying concepts and approaches. Its great to pick apart to get
specific events under control, but doesn't give me the "why's" and "what's"
of the process. I find that viewing the source code in my editor is much
quicker since I can search for text.
I think WPP is a great product, and am excited about its potential for me,
but would appreciate a little more help in using it effectively.
I am somewhat surprised that the excellent work and style of PAL By Example
is missing in WPP. Perhaps you have a "WPP By Example" in the offing?
Yes? No?
#: 230272 S13/Addins/Training ·
28-May-93 15:18:04
Sb: WPP4
Fm: Thomas P Knox 70410,764
To: Andrew Appell 74007,146 (X)
How do I:
1. Turn off the printer output for the error proc while in development.
2. I set wp.y["AppDevelop.l"] = TRUE, how do I get the event display to
display?
3. While adding entries to one table, a lookup procedure calls a dialog box
for a name fill in. If the name isn't there I move (window select) to
the names table to add a new entry. WPP tells me to press INS to add
the record, but when I do, WPP puts me back in the first table. When
departing the first table I:
window select wpWindowTagHandles.y["VendorWindow"]
window move wpWindowTagHandles.y["VendorWindow"] to 5,10
WP4CallTriggers.n("AW,AT,AR,AF") ; call arrive triggers
Fm: Andrew Appell 74007,146
>>How do I:
>>1. Turn off the printer output for the error proc while in
development. The OopsPrint4.u() proc is not sensitive to
wp.y["AppDevelop.l"], so the best way would be to copy the WP4Error.n()
error procedure to your own name and have it call a version of
OopsPrint4.u() without the printer output. Include a statement in
"PrepSetup" or "PrepWait" like: ERRORPROC = IIF(wp.y["AppDevelop.l"],
"MyErrorProc.n", "WP4Error.n")
>>2. I set wp.y["AppDevelop.l"] = TRUE, how do I get the event display
>> to display?
Press [Ctrl V], or press [Alt F10] or right click on the current window
and select "Event Display" from the popup menu.
>>3. While adding entries to one table, a lookup procedure calls a
>> dialog box for a name fill in. If the name isn't there I move
>> (window select) to the names table to add a new entry ...
There is an example of adding a new record to a lookup table in Demo 7.
The technique can be used as is or sections of WP4AddOneRecord.n() and
WP4DepartAddOneRecord.n() may be adapted to the individual situation.
There are many uncertainties in this kind of operation which made it all
but impossible for us to create a "plug-and-play" routine to do it. It
can be done, though.
#: 230526 S13/Addins/Training ·
31-May-93 15:28:41
Sb: ClearAll (WPPRO)
Fm: Jeffrey B Firestone 72240,1044
To: PAL by Example 71171,1340
I like the new Wait Plus Pro 4.0. I do have one major problem. Most of my
applications permit the user to view one of many tables while he is editing
another table. This is a pop-up type of editting and viewing that is much
less restrictive than a simple help style pop-up. There is no easy way to
make such a recursive call in WPP4. I would like to be able to issue a
Snapshot function, do a ClearAll, perform my other processing (perhaps make
a second call to WPP4.0), and then restore the context from the snapshot.
This is also very useful for complex reports, adhoc querying, and other
common tasks that one may wish to perform while viewing/editing a table
with WPP4.0.
Fm: John Rendell 70474,377
To: Jeffrey B Firestone 72240,1044
Jeffery - Just put all the tables on the workspace and jump to different
tables via Menus or Hotkeys (Or even the internal Image Select in WPP).
I have a production app that has 4 MT forms, 6 table views, and 4 hidden
tables that work just fine. User can switch between them as necessary.
Note that takes a substantial understanding of the entire WPP mechanism.
Fm: Thomas P Knox 70410,764
To: John Rendell 70474,377
<<... (Or even the internal Image Select in WPP). >>
What is an "internam Image Select"? Thanks
Fm: Andrew Appell 74007,146
To: Thomas P Knox 70410,764 (X)
>>What is an "internal Image Select"? Thanks
I think John is referring to the list of windows presented by choosing
WindowSelect... from the System Menu.
Fm: Steve Erbach (NEWPALS) 70620,3432
To: Jeffrey B Firestone 72240,1044
>> Most of my applications permit the user to view one of many tables
while he is editing another table. This is a pop-up type of editting
and viewing that is much less restrictive than a simple help style
pop-up. There is no easy way to make such a recursive call in WPP4. <<
Sounds like this sort of capability is embodied in Demo 4 in WPP4 where
about 10 windows are active all at the same time. Each one is assigned
a set of rights to disallow or allow editing as you choose and the user
is able simply to click on any of the windows or use the System menu to
choose which window s/he wants to visit.
I'm a bit confused as to how your method of pop-up editing/viewing
qualifies as recursive. Isn't it just context-sensitive and
event-driven?
The Snapshot capability you mention sounds like Demo 6.
Fm: Andrew Appell 74007,146
To: Steve Erbach (NEWPALS) 70620,3432 (X)
I think what Jeffrey means by "Snapshot" is the ability to store the
entire workspace, ClearAll, and then be able to restore it exactly as it
was.
Demos 5 and 6 illustrate that WaitPlus will automagically restore form
windows that Paradox has blown away as a result of form conflicts. A
"global" Save and Restore, however, is not currently available in WPP4
since we're trying to discourage that approach.
Fm: Andrew Appell 74007,146
To: Jeffrey B Firestone 72240,1044
I see two distinct issues in your message.
1) Allowing the user to select a new table to edit which you must then
make available to them, presumably under WaitPlus control.
Provided the list of tables which they can choose from is fixed and
the number of them is less than say 20, the preferred way would be to
load them off screen (i.e. 1000, 1000) as part of the WPP setup proc
with CanArrive = False and with the WPP TableRights set for the edit
session until needed, then moved into position and CanArrive reset to
True. Even if it was possible to "snapshot", clearall and restore
the original session, this method would provide the best performance,
by far.
2) Doing querying and reporting from within a WaitPlus session.
While CLEARALL between queries is the surest way of keeping one query
from interfering with the next, I have never run into a situation where
it was impossible to keep track of the query images placed and the
resulting "Answer", "Inserted", etc. tables, and clear them individually
leaving the tables/forms involved in the WP session intact.
Again, a little more work to clear these other images one by one is a
lot better than the overhead to store the parameters for all windows on
the desktop and then restore them (including updating with new handle
the windows will have when created again).
Fm: Thomas P Knox 70410,764
To: Andrew Appell 74007,146
<< them off screen (i.e. 1000, 1000) as part of the WPP setup proc with
CanArrive = False and with the WPP TableRights set for the edit
session until needed, then moved into position and CanArrive reset to
True. >>
Why set CanArrive = False and change it to true after the move? Is this
so they can only get there under PAL control?
Fm: Andrew Appell 74007,146
To: Thomas P Knox 70410,764 (X)
>>Why set CanArrive = False and change it to true after the move? Is
>>this so they can only get there under PAL control?
The reason for setting the CanArrive attribute False for windows placed
off screen until needed is to make them "invisible" to the user. That
is, they cannot be selected from the Window Select list or moved to when
[Ctrl F4] is pressed to cycle through the windows.
#: 230866 S13/Addins/Training ·
02-Jun-93 11:37:18
Sb: Map /GIS HELP ! ! !
Fm: Michael J. Eisworth 71222,3474
To: Sysop (X)
Does anyone know of a program that can import Paradox (either for DOS or
Windows) and can print out a simple U.S. map. What I am looking for is a
program that shows where my company has bought real estate. The
geographical info doesn't have to be too detailed (basically I would like
to have a one page print out of the US with dots or symbols in the location
of deals).
Fm: Michelle Kelsey (Sysop) 71333,120
You may want to consider a product known as GeoGraphics sold by Software
Publishers Corp who also produce Harvard Graphics. The company is
located in Santa Clara, CA and can be reached at (408) 988-7518. There
may be other products out there which have similiar functionality, so
you may want to check out your local software store. After working with
GeoGraphics I found it easy to use. By the way, since Paradox can
export out as ASCII Delimited, any program which will import ASCII will
work. Good luck,
Fm: John Strong 70262,2217
I am unfamiliar with the product Michelle suggested and it may fit the
needs described below.
The real issue here is how the information in the Paradox database is
going to be used by the geographic program. Presumably, Paradox is
involved because you want to display either a subset of the properties
owned or the properties owned change over time. If this assumption is
incorrect, then you should consider a standalone product that allows you
to draw points on a map.
Interfacing a database and a geographic system requires that the X and Y
coordinates you intend to place on the map be stored in the database.
But where do you get the coordinates? - that is the real question.
The programs we work with, MapInfo & ArcInfo, could do the job. But the
cost might be prohibative. MapInfo will get your job done for
approximately $2,000 - a little more if you buy the programming
language.
Fm: John B. Moore (TeamB) 71333,1775
I collected a brochure at the conference that sounds like it would be of
interest to you, if you have a fax number I can fax it to you...
#: 230929 S13/Addins/Training ·
02-Jun-93 14:44:19
Sb: WPPRO BufferStuff
Fm: Thomas P Knox 70410,764
To: Andrew Appell 74007,146
I'm trying to use the WP4EventBufferStuff.u(). It executes, but the INS
doesn't get processed. I've tried returning 0 and 10 with the same result.
The following code is in a table arrival procedure:
case table() = "Vendor": ; from lookup add vendor
dynarray event.y[]
event.y["TYPE"] = "KEY"
event.y["KEYCODE"] = -82 ; insert
WP4EventBufferStuff.u(event.y)
return 0
Also, I couldn't find a discussion of using the return value of 10 in the
manuals. Did I miss it somewhere? Thanks.
#: 230951 S13/Addins/Training ·
02-Jun-93 17:06:47
Sb: WPP4.0 Lookup Table Help
Fm: Steve Maziarz 71774,1131
To: ALL
OK, I've been reading all the messages here about Wait Plus Pro and let me
be yet another voice in the night crying for a more complete tutorial on
how to merge WaitPlus into an already existing application as well as more
complete information on the ins & outs of how to use it.
But for now, I have what seems to be a rather simple and common question.
When the user presses [F1] for a Lookup table, I want to be able to display
the appropriate table in a nice formview, as opposed to the default and
rather plain tableview.
I've already done some experimentation on changing the actionprocs for
"PREPLOOKUP" & friends, but I'm still left with the typical Paradox
problems of being in CoEdit mode, having to post the record before I can
move off the table, etc. When I bought WaitPlusPro recently, I was hoping
it would have some common procs already defined to help out with such
scenarios. I'm tired of working around Paradox's paradoxes.
Is there a proc I can call that will preserve the state of the table I'm on
and let me move off the table, handling all the stupid things you have to
with Paradox? Please point me in the right direction.
Fm: Thomas P Knox 70410,764
What I do to avoid the "post record..." problem to move off the multi
table form is:
- create a one field, one record table, the one record can contain any
value (mine is an A1 with a space), but it must contain a value.
- embedd this table unlinked on you master table.
- moveto this table first, and then you can go to any other window you
like without that annoying beep and error message.
When you return to this window (form) you will return to the master table
and not the "dummy" table.
Fm: Andrew Appell 74007,146
To: Steve Maziarz 71774,1131
>>But for now, I have what seems to be a rather simple and common question. When
>>the user presses [F1] for a Lookup table, I want to be able to display the
>>appropriate table in a nice formview, as opposed to the default and rather
>>plain tableview.
Common, yes; simple, not entirely. As you know, Paradox has no built-in
provision for this, so we have to create our own. One of the procedures
included in WP4 is WP4LookupSelect.n() which, in addition to handling the
WAIT TABLE during normal lookup help and fill, may be called independently
by you to create a pseudo-lookup using a table or form that is not a
valcheck lookup.
As for those nasty issues of posting/deleting a detail and unlocking the
master before being allowed out of the form - if Paradox requires it,
there's no way WaitPlus can work around it. You have been given the
suggestion to move to an unlinked detail to get out of the form without
unlocking the master record. While this is true, if you were on a linked
detail record originally, it would have been posted by moving off it, so
this technique does not solve all the issues.
As for the "lookup form", in your PrepLookup procedure:
ECHO OFF
;
; Code to get out of the table/form when [F1] has been pressed.
;
WINDOW SELECT wpWindowTagHandles.y["MyLookupForm"]
WINDOW MOVE wpWindowTagHandles.y["MyLookupForm"] TO 1,0 ; or whereever
n = WP4LookupSelect.n() ; Wait for [F2] or [Esc].
ECHO OFF
IF n = -60 THEN
COPYTOARRAY lookup.r
ENDIF
WINDOW MOVE wpWindowTagHandles.y["MyLookupForm"] TO 1000,1000 ;off screen
WINDOW SELECT wpWindowTagHandles.y["OriginalDataTable"]
WP4CallTriggers.n("AW") ; Restore normal prompt, menu and waitspec.
;
; Code to restore your original position in detail table, record number,
; current field, etc.
;
IF n = -60 THEN
[] = lookup.r[2] ; fill in fields as needed
ENDIF
RETURN 1 ; Don't process [F1] key any further.
#: 231219 S13/Addins/Training ·
03-Jun-93 20:01:44
Sb: Lockdump
Fm: Dave Eden 75130,431
To: David R. Faulkner 76116,3513
I've been testing your Lockdump program and have a question (please
bear with me if it seems elementary). Using the sample Lockdump output
below:
1 EVENTS
Session = 557 User=Sue PFL on DB
2 EVENTS
Session = 557 User=Sue FL on family 1
3 EVENTS
Session = 557 User=Sue PFL on F2
From this display, we see a PFL on the table and a PFL on the form. What
is the FL (full lock?) on the family? I see this FL with a different family
number for each user; what does this mean?
Fm: DAVID R FAULKNER 76116,3513
I hate to admit it but your guess is as good as mine. In the .lck file
(this does not apply to 4.0 btw), I ran across these locks that I did
not know how to decode. The actual lock type (FL or PFL in some cases)
I am interperting as if it were a regular lock. The 'on family' is just
there cause I had to put something there. The number that follows the
on family comes directly from the .lck file. I don't know why these
entries are in the .lck file, any ideas? Borland folks fell free to
jump in and clear this up. DrF
#: 231265 S13/Addins/Training ·
03-Jun-93 23:45:07
Sb: How 2 in PaintPal?
Fm: Karl Thompson 72366,306
To: Ted Rosenberger 70313,1610 (X)
First thanks for a wonderful product! I've been using PaintPal for just 2 days
and already it has helped me improve the looks of my apps.
The question that I have has as much to do with dialog boxes as it does with
PP. I hope you don't mind. What would be the best way to set up a dialog box
that does the following:
Select a record from a picklist. The picklist is displaying the value of a
particular field. Then once the record is selected, initialize other fields in
the dialog box so that they can be edited. (What would really be neat is if
the "other fields" would be constantly updated as the user scrolls through the
pick list. (I don't want the user to be able to edit the field that was used
to select the record, but it should always be displayed.)
Fm: Ted Rosenberger 70313,1610
You're right, the functionality you're looking for has nothing to do with
PaintPAL.
However, you should easily be able to achieve the desired behavior by
writing a Dialog Proc for the dialog box. Have you written any dialog
procs yet?
The basic idea would be to trap for the update trigger. You'd have the
table on the workspace and whenever your dialog proc gets an update
trigger where the tag is the tag of the picklist, you'd do a locate
based on the new value of the picklist (extract the value of the
picklist using the ControlValue function), and then load the accept line
To Variables with the new values and call the REFRESHDIALOG command (or
REFRESHCONTROL for each appropriate accept line). A "Save" button could
be defined to write the values back to the table, you you could do it
"live" each time you get an update trigger on a field.
That's all the hints I'll give. You'll learn a lot by struggling through
getting this to work. Call us if you have more questions (215) 820-9918.
Glad you like PaintPAL! Tell your colleagues!
#: 231485 S13/Addins/Training ·
05-Jun-93 02:57:24
Sb: WWP
Fm: Thomas P Knox 70410,764
To: Alan Zenreich 71171,1340 (X)
I went back into ScriptGen to modify the workspace setup. I saved it and
regenerated the script.
Now when I call WPP, it sets up the workspace, and immeadiately clears
everything away and quits as if I pressed escape to quit.
Where do I look for the problem?
Fm: Alan Zenreich (ZS/PBE) 71171,1340
Do you know if the desktop is setting up successfully? Generally, if a
desktop cannot be set up at run time, WPP will display a dialog box
telling you what part of the desktop is missing (e.g, a password
protected table, wrong sort order, etc.)
Is the setup procedure returning a TRUE value? If not, WPP will take it
as a signal that the setup was not successful and "clean up" on its
own.
The ScriptGen facility writes a RETURN TRUE after the last call to
wp4Setup.l(), but some folk inadvertantly remove the line when moving the
code to their own scripts.
Another thing that might revoke the WPP session is something that your
code in an action point may be doing that ends the WAIT session. If
the original setup proc is ok, could you place messages in some of the
early action points "PrepSetup", "PrepWait" and "ArriveWait" and see how
far you get by monitoring the messages.
Let me know what you find out.
Fm: Thomas P Knox 70410,764
To: Alan Zenreich (ZS/PBE) 71171,1340
I owe you an apology on this one. It had nothing to do ScriptGen. At
the same time I modified the workspace, I made a _slight_ change in
the procedure being called in "PrepWait". The "Return 0" got eliminated
and so the proc was setting retval to true instead of 0.
All's better and working well. I still think WPP will an indespensible
item, but I didn't anticipate the learning curve.
One thing I think that would have been helpful is, if the code for each
of the demo apps had its code listed separately instead of all eight
apps rolled into one set of procedures. It would make it easier to
follow what was happening, particularly learning how to use WPP more
effectively.
#: 231205 S13/Addins/Training ·
03-Jun-93 17:40:55
Sb: WPStuffBuffer
Fm: Thomas P Knox 70410,764
To: Andrew Appell 74007,146
In my table arrival procedure I have:
switch
case table() = "Vendor":
dynarray event.y[]
event.y["TYPE"] = "KEY"
event.y["KEYCODE"] = -82 ; insert
WP4EventBufferStuff.u(event.y)
case table() = "Enterpay":
if not recordstatus("new") then
dynarray event.y[]
event.y["TYPE"] = "KEY"
event.y["KEYCODE"] = -82
WP4EventBufferStuff.u(event.y)
endif
endswitch
When I arrive on the "Enterpay" table, I get the INS as expected, when I
arrive on the "Vendor" table, I don't get the INS. What do I look for as
the source of the problem?
By the way, has any one mentioned that a tutorial on how WPP works would
be _EXTREMELY_ useful?
Fm: Alan Zenreich (ZS/PBE) 71171,1340
What does the TABLE() function return when you arrive on the Vendor
table? If is simply "Vendor" or is there a drive spec, path, etc?
Fm: Thomas P Knox 70410,764
The table() returns the correct name of the table, and the
WPStuffBuffer() function is called, but it completes with no insert.
What do I look for as the problem?
Fm: Alan Zenreich (ZS/PBE) 71171,1340
Could you call me at 201-261-3325 and we'll chat about your code.
#: 231502 S13/Addins/Training ·
05-Jun-93 10:45:12
Sb: #231306-WPStuffBuffer
Fm: Ted Rosenberger 70313,1610
To: Alan Zenreich (ZS/PBE) 71171,1340 (X)
I've been trying to get to the bottom of a problem that I've been having in an
app for a while. Have you run across the vague multi-user PAL error that DOES
call the errorproc: "Record Was Changed". We think it is a Paradox 4.0, 4.01,
and 4.02 bug with refreshing since using the REFRESH command liberally in the
app seems to minimize the problem. (The app currently runs in compatible
mode.)
#: 231497 S13/Addins/Training ·
05-Jun-93 10:07:47
Sb: WP4 Help
Fm: Tucker Brawner 73455,1440
To: Andrew Appell
Your last advice was helpful and my problem seems to have generated some
request s for a brief "cookbook" cycle of development. I urge you to
pursue this.
Current question...I want to do an ARRIVEFIELD/DEPARTFIELD proc but manual
says to use these, you must activate them in ARRIVEWINDOW (or table?).
Short of this cryptic advice, I don't know where to look for specifics on
activating these procs.
Fm: Alan Zenreich (ZS/PBE) 71171,1340
I'd like to get a better handle on what kind of a cookbook you'd like.
Could you, and some other folk give us a table of contents?
Do you think folk would actually spend time reading it? I'd like to
think so, but in reality very few folk actually read program manuals
before diving right in (and getting themselves pretty confused).
I'm one of the manual-readers, but there are very, very few of us. We
put a lot of work into the documentation for WPP, the most complete set
ever. However, if we can add some pages, or a separate booklet that
will make it easier for the users, I'm all for it..... but we're still
not sure what is needed/wanted. So, speak up...... by the way, also
speak up with your success stories with the product. We hear from
developers all the time who are completing projects way ahead of
schedule, but they don't post those kinds of messages on the forum.
Like Paradox, WPP is very flexible, and folk can use it to whatever
level they are comfortable. However, some of the built in WPP
functionality is not for the novice. For example, one user wanted to
know why it was so convoluted to add a record to a lookup table in WPP.
The reason is that Paradox makes it very difficult to do, and the fact
that WPP includes this feature does not mean that it is to be used by
inexperienced WPP programmers.
On the other hand, it's always tempting for those new to the product to
attempt some of the more esoteric features because their application
seems to demand it. Sometimes they get a little frustrated because they
can't tell exactly what WPP is doing at a given time. That's why we
supply the source code.... so you can follow along with the "home game"
version. The source code is heavily annotated, and explains the whys
and wherefores of the bizzare hoops that we had to jump throught to give
you a stable product that does what you need to do. We estimate that
over 30% of the code is getting around what David Letterman might call
"Stupid Paradox Tricks".
So, after having spent so much time writing, debugging, and documenting
the program, we are careful about adding to the paper load. Then again,
most alpha and beta testers had no documentation at all...... they only
had the source code, and they developed complete applications...... go
figure!
Fm: Don Schubert (TeamB) 70007,4654
I think what they are asking for is a simple, but complete tutorial that
takes them from beginning to end in creating/converting an app with WPP.
Perhaps something like the simple app in Celeste's "Best of". I'm
hearing a lot of "can't see the forest for the trees" comments in these
msgs...
Fm: Craig Jones (TeamB) 73627,2320
To: Alan Zenreich (ZS/PBE) 71171,1340
The program I just released (The CLAW -- an Application Workshop add-on)
has a quick-reference card and a matching chapter in the manual that is
organized by subject:
Effect to be Achieved How to do it
--------------------- ----------------------------
Menus
Create "sticky" menus (1) Use the M/A->PAL funcntion...
(2) Split up the app into subapps...
Launch an App from... See the DEMO.SC example...
Multi-Actions
Convert to PAL Play CLAWUTIL and choose...
Queries
Fix up mismatches CoEdit the CFG\OBJECTS table...
Maybe this sort of format is what Tucker has in mind?
Fm: Thomas P Knox 70410,764
To: Alan Zenreich (ZS/PBE) 71171,1340
What I found missing in the manuals was the basic "How-To" use WPP in an
application. You are correct that the code is very well commented and
explains the all the problems and their solutions. This is very useful
and necessary.
Since the term "Cookbook" was used in the parent message, let me reuse it
here as an analogy. You have developed a series of excellent and complex
"recipes" that I as a budding chef would like to put to good use.
However there is no discussion as to how to put together a an equally
successful "bill-of-fare" (I intentionally avoided using the word
"menu").
I know that that type of discussion would involve some discussion of the
new Event Model, but that's not what I'm looking for. I consider
myself a fairly competent programmer and I understand the Event Model.
I have done one major application in 4.0 and developed my own (limited)
event handling/dispatching routine that works quite well for this one
application. From this, I can really appreciate the amount of time and
effort that went into WPP, and realize how useful it will be. But I
can't seem to find anything in the manuals that tell me how to really
get the most from it.
The demo apps illustrate some of the power and flexibility of WPP, but
there is no discussion of how it was implemented to solve those
problems. True, you can study the source code, but all eight apps are
tossed in together. It is difficult to glean why you did what you did
for any particular demo app. Particulary with respect as to how to
effectively use the wpActionProcs[].
Fm: Steve Maziarz 71774,1131
To: Thomas P Knox 70410,764
Alan, I think that the last paragraph of Tom Knox's message is most
appropriate to my case. I see from the demos that all the features I
need are there and have attempted to sort them out from the demo's but
the fact that all demos are grouped together makes this difficult. See
my other message I'm posting today for a detailed plea for HELP. I'm
totally new to Wait Plus and it came HIGHLY recommended from many users
I spoke to. So, that's why I bought it. However, I've been having on
heck of a time getting it to do its tricks.
I have read the manual, and have even been forced into DEBUGGING the
sample apps to see what actually goes on. However, this is a very time
consuming process and I've gotten confused on more than one occassion
(as is the case right now). As an example of what should be included in
a "cookbook" for WPP, you might try a Q & A format. Here's one of my
Questions:
What must I do to display a FORMVIEW of a LOOKUPTABLE and let the user
make a choice from there?
One obvious thing I learned is that once I get to the FORMVIEW, I should
call WPLookupSelect.n() and let it handle the interaction with the user.
However, just getting to the FORMVIEW is my current problem. Your DEMO 5
illustrates how WaitPlus will restore windows that Paradox "nixes", but
I can't seem to get it to do that for me. See my message "WPP FORM
LOOKUP" for details.
Fm: JOHN RENDELL 76366,770
WPP is extremely powerfull - but as it has been pointed out before, if
you dont know how to drive, dont start with an Indy car... As you have
pointed out (Both on the form and in the Wpp manuals) you should know
PAL and Interactive Paradox very well before trying to 'control'
WaitPlus.
WPP has saved me many many hours (With version 2.0, I tossed out 6000
lines of code that I was using for 'generic' data entry sessions - I
tossed 8000 lines when I received 4.0). However, it has been very
frustrating to use sometimes because I dont fully investigate what my
actions will do. I all to often try to 'beat it with a hammer' because
it has to be done yesterday. This leads to many forced Wpp behavior
elements that cause problems as I modify the application latter.
Like you, I am a manual reader - I usually read the manuals for products
I purchase at least 2 times cover to cover before using them (shoot, I'm
on the 30+ reading of the ObjectPal Developers Reference <G>). I found
the documentaion to be very helpfull, but still lacking in the 'nuts and
bolts'.
The best example of the lacking is in the WP4AddOneRecord.n() proc. If
you try to trace through the example of this, you can get lost quickly
unless you have spent a LOT of time with the inner workings of Wpp. The
docs on page 62-63 give some insight, but there could be more
information in terms of what is really going to happen. It took me 3
days to really understand what happens when this procedure is called.
Things like "Should I explicitly call any triggers?", "What error
checking is NOT done?", What should I NOT do to disrupt any of
WaitPlus's internals?"
On the other hand, there is Page 56. The Updating Variables to Reflect
PAL Movments section is a must read for any customization. This tells
you what you need to do if you bypass/override any of the WaitPlus
standard mechanisims.
To sum it up, the product is a Must Have - I've used it for the last 3
years in EVERY app that I have put out. WPP 4.0's documentation is the
best yet. However, with all of the new 'features' of Paradox and
WaitPlus, there is a steep learning curve. I dont know if a cookbook
would be appropriate, but maybee a tips/traps guide.
#: 231681 S13/Addins/Training ·
06-Jun-93 19:27:27
Sb: #230936-BufferStuff
Fm: Andrew Appell 74007,146
To: CHRIS BORGERS 73207,1467
At the bottom of WP4CallEvents.n() is a summary of the possible return values:
; n = 0 : Process the current event and continue trigger cycle.
; n = 1 : Deny the current event; end trigger cycle but stay in the WAIT.
; n = 2 : Deny the current event; end trigger cycle and end the WAIT.
; n = 10 : Deny the current event but allow any buffer events to be processed.
RETURN n
Basically, unless you have buffered any events to take place when control
returns to the wait proc, returning 10 is the same as returning 1 -
the current event will be denied and trigger cycle will be ended.
#: 231660 S13/Addins/Training ·
06-Jun-93 15:25:58
Sb: WPP FORM LOOKUP
Fm: Steve Maziarz 71774,1131
To: 71171,1340
HELP! I'm working with Wait Plus Pro 4.0 and am a NEW USER of same. In looking
at the DEMOS provided, I saw two very useful features which I have been trying
to take advantage of. These are: 1) In DEMO 5, Wait Plus Pro's ability to
restore FormWindows which Paradox deletes because they are forms from a table
which has an embedded form in the table I'm currently working with. 2) The
ability to add records to a lookup table under the same scenario, where
another form from the lookup table is an embedded form in the table your
working with.
What I'm trying to do is what I consider to be a very common need: The ability
to present a FORMVIEW of a LOOKUP table during an editing session. Does anyone
have or could someone provide a GENERIC procedure that would show how to do
this?
I currently have a procedure defined which is attached to the ARRIVELOOKUP
action so that I can grab the name of the Lookup Table. All seems to go well
until I attempt to switch to the FORMVIEW of the lookup table which was
already placed on the workspace during the Setup procedure. When I try to do:
WinHandle=wpWindowTagHandles.y["TAG.FRM.DEPT"]
WINDOW SELECT WinHandle
I get an error saying that this is a bad window handle. I even tried setting a
PREPLOOKUP action point and checking for the formview window of the lookup
table, however it isn't there. Also, when I first get into the edit session, I
am presented with the FORMVIEW of the "EMPLOYEE" table despite setting
wp.y["InitView.a"]="TABLE".
Obviously, I'm doing something wrong, but I'm not sure what. Any help on this
would be appreciated.
Fm: Andrew Appell 74007,146
I responded to an earlier message from you in which I outlined the steps to
do a "form lookup" but I'll go into some more detail as to why a
plug-and-play routine to do this is not part of WaitPlus.
The code to do this for a *specific* situation is not very difficult to
write. However, since this is not a valcheck lookup, leaving the current
record and form will be necessary (which will in most cases involve
unlocking/posting the record).
A side effect of this would be the possibility of another user
coming along and locking the master or detail that you just left.
There is no way for us to know, *generically*, the steps that may
be required for you to keep control of the record during the "lookup"
interaction in your situation, or what action you want to take place if
another user has managed to steal the record.
(Assuming you are even trying to keep the record under control and not
just relying on the laws of probability that, most likely, no one will lock
the record out from under you. Two common techniques involve using a
[Lock] field in the table or a semaphor lock to inform other users
that the record is in use by someone.)
Believe me, the difficulty involved in providing features that we thought
would be of benefit to WP4 users was never a factor.
(I direct your attention to WP4RestoreFormWindows.u() and WP4FormSwitch.l(),
two routines that even we shake our heads at amazement - because they are
so bizarre, were so hard to write, were so necessary...
and because they work - all the time.)
The only issue was our ability to grasp the nature of the feature and
whether it could be written generically - so it would work first time,
every time regardless of the situation.
>>I get an error saying that this is a bad window handle. I even tried setting
>>a PREPLOOKUP action point and checking for the formview window of the lookup
>>table, however it isn't there.
From the sound of it, I would say that at the point where you have left the
master record of the form in which you are doing the lookup you need to
switch to table view and make an explicit call to WP4RestoreFormWindows.u()
to re-create the "TAG.FRM.DEPT" form window before selecting it.
>>Also, when I first get into the edit session, I
>>am presented with the FORMVIEW of the "EMPLOYEE" table despite setting
>>wp.y["InitView.a"]="TABLE".
You must also set wp.y["InitImage.n"] = 1 ; or whatever image number.
Fm: Steve Maziarz 71774,1131
Thanks for the "magic" WP4RestoreFormWindows.u and your other "generic"
form lookup routine. Just a note that I saw no reference to the above
procedure in the manual and obviously didn't trace far enough into the
code to find it.
Might I suggest that in any "supplement/cookbook" that is published, your
messages to me be included.
I can certainly appreciate the amount of code & hassle you guys went
through to bring such a needed procedure to fruition. I couldn't
believe my eyes when I watched DEMO 5. Thanks again, PAL By Example
support - both phone & CIS - is top notch !
Fm: Steve Maziarz 71774,1131
To: Alan Zenreich 71171,1340 (X)
Alan, I think that the last paragraph of Tom Knox's message is most
appropriate to my case. I see from the demos that all the features I need are
there and have attempted to sort them out from the demo's but the fact that
all demos are grouped together makes this difficult. See my other message I'm
posting today for a detailed plea for HELP. I'm totally new to Wait Plus and
it came HIGHLY recommended from many users I spoke to. So, that's why I bought
it. However, I've been having on heck of a time getting it to do its tricks.
I have read the manual, and have even been forced into DEBUGGING the sample
apps to see what actually goes on. However, this is a very time consuming
process and I've gotten confused on more than one occassion (as is the case
right now). As an example of what should be included in a "cookbook" for WPP,
you might try a Q & A format. Here's one of my Questions:
What must I do to display a FORMVIEW of a LOOKUPTABLE and let the user make a
choice from there?
One obvious thing I learned is that once I get to the FORMVIEW, I should call
WPLookupSelect.n() and let it handle the interaction with the user. However,
just getting to the FORMVIEW is my current problem. Your DEMO 5 illustrates
how WaitPlus will restore windows that Paradox "nixes", but I can't seem to
get it to do that for me. See my message "WPP FORM LOOKUP" for details.
#: 231187 S13/Addins/Training ·
03-Jun-93 16:21:01
Sb: OKRecord.n
Fm: Thomas P Knox 70410,764
To: Andrew Appell 74007,146
What is the relationship of wpActionProcs.y["OKRECORD"] = "OKRecord.n" to
other procedures?
The manual says it is called "at the end of a DepartRow trigger action".
Does this mean I need a DepartRow proc to be defined? In the following:
case wpEvent.y["KEYCODE"] = -60:
WP4CallTriggers.n("DF,DR")
with:
; wpActionProcs.y["DEPARTROW"] = "" ; commented out
wpActionProcs.y["OKRECORD"] = "OKRecord.n" ; active
pressing F2, OKRecord.n() is not called.
If I need a DepartRow procedure defined, the manual doesn't indicate this.
Fm: Alan Zenreich (ZS/PBE) 71171,1340
If you enable the OkRecord trigger, it simply executes after any
*attempt* to depart the row on a changed record (but before the depart
occurs). This gives you the opportunity to deny the depart.
Typically an OkRecord.n() procedure is used to validate record level
changes. For example, you might not want the user to leave the record if
one or more fields are missing, or two fields contradict each other. In
this case the proc should return a 1 which would keep the user on the
record.
Fm: Andrew Appell 74007,146
To: Thomas P Knox 70410,764
>>What is the relationship of wpActionProcs.y["OKRECORD"] = "OKRecord.n" to
>>other procedures?
>>The manual says it is called "at the end of a DepartRow trigger action".
>>Does this mean I need a DepartRow proc to be defined?
As Alan has said, OKRecord.n() is only called on a record that has been
changed (RECORDSTATUS("Modified") = TRUE).
The DEPARTROW trigger procedure internal to WaitPlus will automatically
trip the OKRECORD action point whether or not you have any custom code
defined for DEPARTROW.
So, no you don't need to have any custom DepartRow procedure defined.
(If you did, it would be invoked before the OKRecord action point occurred.)
Fm: Thomas P Knox 70410,764
To: Andrew Appell 74007,146
<< The DEPARTROW trigger procedure internal to WaitPlus will
automatically trip the OKRECORD action point whether or not you have
any custom code defined for DEPARTROW. >>
So is that to say that WP4CallTriggers.n("DR") will call OKRecord.n()?